Ich erstelle eine Website für Mobiltelefone, die Größe der Fotos ändert und lädt sie.Leere Dateien hochgeladen in Android Native Browser
$('#ImgPreview canvas').each(function(pIndex) {
vFormData.append(pIndex, canvasToJpegBlob($(this)[0]), vIssueId +'-attachment0'+ pIndex +'.jpg');
});
$.ajax({
url: '/api/ob/issuefileupload',
data: vFormData,
processData: false,
contentType: false,
type: 'POST'
}).done(function(pData) {
window.location = '/issue?id='+ vIssueId;
}).fail(function(pJqXHR) {
alert(My.Strings.UploadFailed);
});
Dies funktioniert in Chrome für Android und in Safari auf iOS, aber in dem nativen Android-Browser haben die Dateien mit einem Gehalt Länge von 0 und Namen Blob + eine UID. Wenn die Datei den formdata hinzugefügt wird, erscheint die Größe auch ziemlich groß (900k gegenüber 50k in Chrome).
Die canvasToJpegBlob Funktion:
function canvasToJpegBlob(pCanvas) {
var vMimeType = "image/jpeg",
vDataURI,
vByteString,
vBlob,
vArrayBuffer,
vUint8Array, i,
vBlobBuilder;
vDataURI = pCanvas.toDataURL(vMimeType, 0.8);
vByteString = atob(vDataURI.split(',')[1]);
vArrayBuffer = new ArrayBuffer(vByteString.length);
vUint8Array = new Uint8Array(vArrayBuffer);
for (i = 0; i < vByteString.length; i++) {
vUint8Array[i] = vByteString.charCodeAt(i);
}
try {
vBlob = new Blob([vUint8Array.buffer], {type : vMimeType});
} catch(e) {
window.BlobBuilder = window.BlobBuilder ||
window.WebKitBlobBuilder ||
window.MozBlobBuilder ||
window.MSBlobBuilder;
if (e.name === 'TypeError' && window.BlobBuilder) {
vBlobBuilder = new BlobBuilder();
vBlobBuilder.append(vUint8Array.buffer);
vBlob = vBlobBuilder.getBlob(vMimeType);
} else if (e.name === 'InvalidStateError') {
vBlob = new Blob([vUint8Array.buffer], {type : vMimeType});
} else {
alert(My.Strings.UnsupportedFile);
}
}
return vBlob;
}
Gibt es eine Möglichkeit, diese Funktion in dem nativen Android-Browser zu bekommen?
Hey, jede Chance, dass du das funktionierst, ich stecke mit genau dem gleichen Problem fest! –
Nein, habe noch keine Lösung gefunden. – bjornarvh
Wir haben das gleiche Problem hier - ich habe eine Prämie hinzugefügt. –