2014-05-07 2 views
8

Wieeinen Klecks auf einen Eingang vom Typ Datei in einem Formular anhängen

// Input of type file 
<input type="file" name="uploadedFile" id="uploadedFile" accept="image/*"><br> 
// I am getting image from webcam and converting it to a blob 
function takepicture() { 
    canvas.width = width; 
    canvas.height = height; 
    canvas.getContext('2d').drawImage(video, 0, 1, width, height); 
    var data = canvas.toDataURL('image/png'); 
    var dataURL = canvas.toDataURL(); 
    var blob = dataURItoBlob(dataURL); 
    photo.setAttribute('src', data); 
} 

function dataURItoBlob(dataURI) { 
    var binary = atob(dataURI.split(',')[1]); 
    var array = []; 
    for(var i = 0; i < binary.length; i++) { 
     array.push(binary.charCodeAt(i)); 
     return new Blob([new Uint8Array(array)], {type: 'image/jpeg'}); 
    } 

    // How can I append this var blob to "uploadedFile". I want to add this on form submit 
+0

Fügen Sie es zu einem versteckten Eingang hinzu? – Erevald

+1

Warum kommen Sie nach dem ersten Byte in der for-Schleife zurück? – dandavis

+0

@kristijan: Versuchen Sie, 'var blob' in eine SESSION-Variable zu setzen und senden Sie sie, während Sie das Formular absenden. – kmario23

Antwort

7

Ich hatte ein ähnliches Problem mit einer ziemlich komplexen Form in einem Winkel app, so schickte ich an Stelle der Form nur die blob einzeln XMLHttpRequest() verwenden. Dieser spezielle "Blob" wurde in einem WebAudioAPI Kontext erstellt und erstellt eine Audiospur im Browser des Benutzers.

var xhr = new XMLHttpRequest(); 
xhr.open('POST', 'someURLForTheUpload', true); //my url had the ID of the item that the blob corresponded to 
xhr.responseType = 'Blob'; 
xhr.setRequestHeader("x-csrf-token",csrf); //if you are doing CSRF stuff 
xhr.onload = function(e) { /*irrelevant code*/ }; 
xhr.send(blob); 
+0

Ich verarbeite den POST in node.js und kann diesen Code bei Bedarf auch einfügen. Ich habe versucht, das Formular und 'FormData' Objekt zu verwenden und das ist die einzige Möglichkeit, die für mich arbeitete. – MikeSmithDev

+0

Hallo Mike, ich ging am Ende mit Node-Webkit, da es alle meine Probleme löst (es ermöglicht das Anhängen von Dateien an die Eingänge), aber wenn ich nicht finden würde, würde ich sicher mit xrh gehen, da es die eleganteste Lösung ist. – Kristijan

2

Sie können nicht ändern, um die file Eingang Blob Eingabe vom Typ Datei anhängen Sie können jedoch einen hidden Eingang verwenden Daten weitergeben. Bsp .:

var hidden_elem = document.getElementById("hidden"); 
hidden_elem.value = blob; 
+0

Ich mache einen Bot - also habe ich keine Kontrolle über das Formular (es ist alles legal, wir müssen nur unseren Workflow beschleunigen: D), ich glaube nicht, dass das erkannt wird als eine Datei auf dem Endserver, deshalb versuche ich einen Weg zu finden, es anzuhängen. Ich benutze TideSDK, die mir Zugang zum iframe und seinem Inhalt gibt, also versuche ich jetzt mit Blob-Daten (was zur Zeit eine Hölle ist zu inspizieren, anzuhängen und zu überprüfen) – Kristijan

+0

@Kristijan muss es unbedingt sein, Teil des Formulars zu sein ? Ich habe etwas Ähnliches getan, indem ich einfach einen XHR-Post nach dem Senden des Blobs gemacht habe. – MikeSmithDev

+0

Nun, das ist, was ich jetzt versuche (nicht wirklich gut) - aber alles ist willkommen :) Ich denke sogar über die Verwendung von Formdata – Kristijan

Verwandte Themen