2016-04-29 4 views
0

Я разрабатываю приложение и пытаюсь загрузить изображение в base64 на свой сервер. Тестирование кода через web работает отлично! И когда я конвертировать изображения в base64 в файл, он возвращает мне следующий объект:Загрузка Base64 в Web, но не загрузка в устройство Cordova

enter image description here

Но когда я пытаюсь сделать то же самое в моем мобильном приложении работает на Android устройства, тот же код создает мне следующий объект File:

enter image description here

Что происходит? Я вызываю функцию, чтобы преобразовать мой base64 изображение в файл, как это:

var blob = new Blob([photoBase64], {type: 'image/png'}); 
var filePhoto = new File([blob], "employeePhoto.png"); 

В первом изображении (который работал) я работала в веб-браузере. Во втором изображении (не работает) Я работал в Android-приложении. Это тот же код ...

Похоже, что конструктор файлов имеет другое поведение в веб-браузере и приложении для Android. Я не понимаю этого. Передача параметров в конструктор файлов в том же порядке создает различные объекты File (как описано на изображениях).

+0

Вы можете оставить пятно на сервере. Не нужно преобразовывать его в объект File. (Blob - файл). –

+0

Это не работает, потому что я должен определить имя изображения для загрузки файла на свой сервер. Даже если я попробую «formData.append (« файл »,« blob »,« employeePhoto.png »); он загружает мою фотографию, но когда я загружаю фото, он дает мне «Недопустимое фото», когда я пытаюсь открыть. –

+0

Файл blob создан неверно (данные base64 или вы неправильно создаете blob). Так что вы не можете открыть). Я использую blob для загрузки на приложение Cordova, он работает. Попробуйте преобразовать base64 в объект blob. http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript –

ответ

0

Если вы пытаетесь конвертировать base64 в File, вы можете использовать часть canvas.toBlob() polyfill

var base64 = "data:image/png,base64,"; // data URI 

var binStr = atob(base64.split(",")[1]), 
    len = binStr.length, 
    arr = new Uint8Array(len); 

for (var i = 0; i < len; i++) { 
    arr[i] = binStr.charCodeAt(i); 
} 

var file = new File([arr], "image"); 

var img = new Image; 
img.onload = function() { 
    document.body.appendChild(this); 
    URL.revokeObjectURL(url); 
} 

var url = URL.createObjectURL(file); 
img.src = url; 
+0

Я пытаюсь загрузить свое изображение, которое уже находится в base64 на моем сервере. Но для этого я пытаюсь преобразовать base64 в файл и отправить как MultiPart, и он не работает через Кордову. –

+0

Вы пытаетесь преобразовать 'base64' в' File'? – guest271314

+0

Да. Как мое описание, он отлично работает в Интернете, но не работает через Кордову на моем устройстве Android. –

Смежные вопросы