Я перепробовал много примеров, опубликованных в сети, о загрузке изображений через Nativescript (в этой части мне кажется, что одна или две проблемы отображаются правильно), но мой PHP-сервер не отвечает ни на что, и я не знаю, как это сделать. получить доступ к файлу, загружаемому на сервер, так как нигде в данных загрузки нет названного имени файла из того, что я вижу. Я использую плагин background-http, но в целом у меня есть несколько проблем, а именно: - Где я могу включить пользовательские данные в загрузку изображений на сервер, используя background-http? - Законченный обработчик на background-http не получает ответ от моего сервера, остается и пустой объект. - На стороне сервера я изо всех сил пытаюсь забрать файл и не знаю, как получить данные пользователя тоже.
Что я спрашиваю: у кого-нибудь есть рабочий пример загрузки из NativescriptЯдро с помощью плагина Background-http (и отправка пользовательских данных вместе с изображением) через PHP-файл, который его получит, обработает и предоставит ответ? На всю жизнь я не могу заставить его работать.
Я попробовал пример с плагином Background-http для тройника, он показывает, что он загружается, но никогда не показывает ответ сервера, просто показывает responseCode 200.
На стороне сервера я перепробовал много примеров, которые нашел в Интернете, но ни один из них, похоже, не работает - я подозреваю, что это потому, что они в основном являются веб-примерами. Мне нужно что-то конкретное для Nativescript.
JS-файл Nativescript
exports.uploadImage = () => {
// file path and url
var file = cameraViewModel.imageAsset;
var url = "https://www.wesignit.co.za/api/wsi_1/WSI_1_PROD/image_upload.php";
var name = file.substr(file.lastIndexOf("/") + 1); //this gets the filename
// upload configuration
var bghttp = require("nativescript-background-http");
var session = bghttp.session("image-upload");
var request = {
url: url,
method: "POST",
headers: {
"Content-Type": "application/octet-stream"
},
description: "Uploading file: " + name
};
var task = session.uploadFile(file, request);
task.on("progress", progressHandler);
task.on("error", errorHandler);
task.on("responded", respondedHandler);
task.on("complete", completeHandler);
// event arguments:
// task: Task
// currentBytes: number
// totalBytes: number
function progressHandler(e) {
cameraViewModel.uploadOutputs = "Uploading file: " + name + " - uploaded " + e.currentBytes + " / " + e.totalBytes + "(" + (Math.round(e.currentBytes/e.totalBytes * 100) * 10 / 10) + "%)";
}
// event arguments:
// task: Task
// responseCode: number
// error: java.lang.Exception (Android) / NSError (iOS)
// response: net.gotev.uploadservice.ServerResponse (Android) / NSHTTPURLResponse (iOS)
function errorHandler(e) {
cameraViewModel.uploadOutputs = "received " + e.responseCode + " code.";
//cameraViewModel.uploadOutputs = "Error uploading file - try again!";
//var serverResponse = e.response;
//alert(e.response);
alert("Error uploading file - try again!");
}
// event arguments:
// task: Task
// responseCode: number
// data: string
function respondedHandler(e) {
cameraViewModel.uploadOutputs = "received " + e.responseCode + " code. Server sent: " + e.data;
}
// event arguments:
// task: Task
// responseCode: number
// response: net.gotev.uploadservice.ServerResponse (Android) / NSHTTPURLResponse (iOS)
function completeHandler(e) {
cameraViewModel.uploadOutputs = "received " + e.responseCode + " code";
var serverResponse = e.response;
alert(JSON.stringify(e));
}
}
Файл загрузки PHP
header('Content-Type: application/json; charset=utf-8');
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST");
$response = array();
$upload_dir = 'uploads/';
$server_url = 'https://www.wesignit.co.za';
if($_FILES['avatar'])
{
$avatar_name = $_FILES["file"]["name"];
$avatar_tmp_name = $_FILES["file"]["tmp_name"];
$error = $_FILES["file"]["error"];
if($error > 0){
$response = array(
"status" => "error",
"error" => true,
"message" => "Error uploading the file!"
);
}else
{
$random_name = rand(1000,1000000)."-".$avatar_name;
$upload_name = $upload_dir.strtolower($random_name);
$upload_name = preg_replace('/\s+/', '-', $upload_name);
if(move_uploaded_file($avatar_tmp_name , $upload_name)) {
$response = array(
"status" => "success",
"error" => false,
"message" => "File uploaded successfully",
"url" => $server_url."/".$upload_name
);
}else
{
$response = array(
"status" => "error",
"error" => true,
"message" => "Error uploading the file!"
);
}
}
}else{
$response = array(
"status" => "error",
"error" => true,
"message" => "No file was sent!"
);
}
echo json_encode($response);
Я ожидаю увидеть ответ сервера, даже если это просто фиктивнаяОбъект ответа (который я тоже пробовал), но я получаю только responseStatus, responseCode и т. д. .... Объект ответа, который я ожидаю заполнить, пуст.
На сервере: ясно, что серверне получает файл и не обрабатывает его.
Пожалуйста, помогите. Я борюсь здесь. Мне просто нужен рабочий пример, который я могу скопировать в будущем.