2014-05-07 8 views
8

come aggiungere blob di ingresso del tipo di fileCollegare un blob ad un ingresso di file di tipo in una forma

// 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

Aggiungerlo a un input nascosto? – Erevald

+1

perché si ritorna nel ciclo for dopo il primo byte? – dandavis

+0

@kristijan: prova a impostare "var blob" in una variabile SESSION e pubblicalo mentre invii il modulo. – kmario23

risposta

7

Ho avuto un problema simile con una forma piuttosto complessa in un'applicazione angolare, così invece della forma I appena inviato il blob utilizzando singolarmente XMLHttpRequest(). Questo particolare "blob" è stato creato in un contesto WebAudioAPI, creando una traccia audio nel browser dell'utente.

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

Elaboro il POST in node.js e posso includere anche quel codice se necessario. Ho provato a utilizzare il modulo e l'oggetto 'FormData' e questo è l'unico modo in cui ha funzionato per me. – MikeSmithDev

+0

Ciao Mike, sono andato alla fine con node-webkit in quanto risolve tutti i miei problemi (consente di allegare file agli input) ma se non ho trovato che sarei sicuramente andato con xrh in quanto è la soluzione più elegante. – Kristijan

2

Non è possibile modificare l'ingresso file ma è possibile utilizzare un ingresso per hidden passare i dati. es .:

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

Sto facendo un bot - quindi non ho il controllo sul modulo (è tutto legale, dobbiamo solo accelerare il nostro flusso di lavoro: D), non credo che questo verrà riconosciuto come file sul server finale, ecco perché sto cercando di trovare un modo per collegarlo. Sto usando TideSDK che mi dà accesso all'iframe e al suo contenuto, quindi sto provando ora con i dati blob (che al momento è un inferno per ispezionare, allegare e controllare) – Kristijan

+0

@Kristijan deve necessariamente essere parte del modulo ? Ho fatto qualcosa di simile semplicemente facendo un post XHR inviando il blob. – MikeSmithDev

+0

Beh, questo è quello che sto provando ora (non andando davvero bene) - ma tutto è benvenuto :) Sto anche pensando di usare i dati dei formulari – Kristijan

Problemi correlati