Ich versuche, erstelltes Foto in Android über Ajax über Remote-API zu senden. Ich benutze Camera Picture Background Plugin.Blob in FormData ist null
Foto ist richtig erstellt, ich bekomme es über AJAX GET
Anfrage und kodieren Sie es zu Base64-Format. Im Debugging-Tool kann ich das Bild selbst durch GET
Anfrageprotokoll sehen.
Next ich analysieren es Blob base64 und versuchen, es zu FormData
anbringt:
var fd = new FormData();
fd.append('photo', blobObj);
$.ajax({
type: 'POST',
url: 'myUrl',
data: fd,
processData: false,
contentType: false
}).done(function(resp){
console.log(resp);
}). [...]
Aber wenn ich die FormData
ich in Debugger sehen senden, die FormData
in Anfrage gleich zu: {photo: null}
.
Btw. wenn ich versuche, console.log
mein blobObj
früher, sehe ich ist es ein Blob, mit seiner Größe, Typ Eigenschaften und Slice-Methode - warum wird es ein Null nach dem Anhängen an FormData
?
EDIT:
console.log(blobObj);
gibt:
Blob {type: "image/jpeg", size: 50778, slice: function}
EDIT2 - Schritt für Schritt Code:
Ich habe URL zu lokalen Bild, nehmen wir an, es in imagePath
Variable gespeichert wird.
Zuerst bekomme ich diese Datei und analysieren es base64:
function base64Encode(){
var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
var out = "", i = 0, len = str.length, c1, c2, c3;
while (i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if (i == len) {
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if (i == len) {
out += CHARS.charAt(c1 >> 2);
RS.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += CHARS.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += CHARS.charAt(c1 >> 2);
out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
out += CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
out += CHARS.charAt(c3 & 0x3F);
}
return out;
}
function getFile(fileData){
var dfd = new $.Deferred();
$.ajax({
type: 'GET',
url: fileData,
mimeType: "image/jpeg; charset=x-user-defined"
}).done(function(resp){
var file = base64Encode(resp);
dfd.resolve(file);
}).fail(function(err){
console.warn('err', err);
dfd.resolve();
});
return dfd.promise();
};
$.when(getFile(imagePath)).then(function(resp){
var fd = new FormData();
resp = 'data:image/jpeg;base64,' + resp;
var imgBlob = new Blob([resp], {type : 'image/jpeg'});
fd.append('photo', img, 'my_image.jpg');
$.ajax({
type: 'POST',
url: 'myUrlToUploadFiles',
data: fd,
processData: false,
contentType: false
}).done(function(resp){
console.log(resp);
}). [...]
});
Fabrikat Blob wie dieses 'var blob = neuer Blob ([payLoad], {type: 'image/png'});' – Viney
Ich erhalte dieses Mal einen Fehler: 'Die Datei, die du hochgeladen hast, war entweder keine Bild oder ein beschädigtes Bild? – mrmnmly
Wie haben Sie dieses base64-Bild in einen Blob umgewandelt?Ich verwende den filereader und seine readAsArrayBuffer-Methode als ersten Parameter für den Blob-Konstruktor. Und die Verwendung eines Dateinamens könnte auch helfen wie [hier] (http://stackoverflow.com/questions/6664967/how-to-give-a-blob-uploaded-as-formdata-a-file-name) – Blauharley