У меня есть файл на моем устройстве, который хранится в папке, например:
/opt/share/folder/image.jpg
Я хотел бы загрузить этот файл на свой сервер, используя какой-нибудь ajax-запрос, так же, как и в стандартной HTML-форме.
После нескольких поисков я пришел, чтобы создать файл Blob и загрузить его на сервер; это работает. Но проблема в том, что мой JPEG по прибытии поврежден и содержит набор цифр и запятых (технически, байтов исходного файла):
255,216,255,224,0,16,74,70,73,70,0,1,1,0,0,1,0,1,0,0,255,219,0,67,0,8,6,6,7,6,5,8,7,7
Файловая система API Tizen позволяет мне открыть этот файл и прочитать его байты, что я и делаю. Поэтому я использую следующий код для чтения байтов, создания большого двоичного объекта и загрузки его на мой сервер:
var raw = fs.readBytes(1024);
var blob = new Blob([raw], {type:"image/jpeg"});
var formData = new FormData();
formData.append('screenCapture', blob);
$.ajax({
type: 'post',
url: myurl,
processData: false,
contentType: false,
data: formData,
success: function(data){
...
},
error: function(jqxhr, status, msg){
console.log("ERROR! " + msg);
}
});
Я наконец нашел, что было не так с моим кодом.
Фактически readBytes возвращает массив чисел, соответствующий байту, но массив не форматируется как байтовый массив.
Создание нового массива Uint8Array из этого массива помогло:
var raw = fs.readBytes(1024);
var byteArray = new Uint8Array(raw);
var blob = new Blob([byteArray], {type:"image/jpeg"});
Других решений пока нет …