2012-12-21 3 views
11

Maintenant que l'amazon a activé CORS je me demandais si cela est possible.télécharger des données de toile à s3

Les données html canvas (sur le navigateur client) peuvent-elles être converties en something et téléchargées directement sur s3?

Je suis sûr que je peux faire une demande PUT à Amazon mais cela nécessite un File.

Je peux obtenir base64 données d'image codées ou même un Blob mais est-il un moyen de sauvegarder cela comme une image à S3 à partir du navigateur client?

est-il un moyen de convertir canvas-File afin que je puisse faire une demande PUT ou d'une manière qui amazon comprend Blob et il enregistre comme une image?

+1

Il est possible de le faire. assez long pour expliquer ici. Mais si quelqu'un est intéressé je vais l'écrire. –

+0

J'aimerais savoir comment vous avez converti 'dataURL' en un blob reconnu par Amazon. –

+1

@RaphaelRafatpanah 'fonction canvasToBase64 (canvas_id) { var base64 =" " try { base64 = document.getElementById (ID_chaîne) .toDataURL ('image/jpeg', 0.8); } catch (e) { // Repli si la conversion jpeg n'est pas prise en charge base64 = document.getElementById (canvas_id) .toDataURL(); // supprime le type de format base64 = base64.replace (/^data: image \/(png | jpg | jpeg); return base64; } ' –

Répondre

-3

La meilleure façon de sauver la toile est de le convertir en base64:

canvas.toDataURL(); 

ou vous pouvez définir le type d'image via l'argument:

canvas.toDataURL("image/png"); 
canvas.toDataURL("image/jpeg"); 
// etc 

montre également cette lib: http://www.nihilogic.dk/labs/canvas2image/

+0

L'OP a déjà dit qu'il était en mesure d'obtenir les données codées en Base64 (et elles sont évidemment conscientes de la fonction' atob'). – katspaugh

+0

qu'est-ce que je fais avec 'base64'? Je veux qu'il soit sauvegardé en tant que fichier à 's3' –

11

C'est ce qui a fonctionné pour moi:

var canvas = document.getElementById("imagePreviewChatFooter"); 
        var dataUrl = canvas.toDataURL("image/jpeg"); 
        var blobData = dataURItoBlob(dataUrl); 
        var fileName = file.name; 
        var params = {Key: fileName, ContentType: file.type, Body: blobData}; 
        bucket.upload(params, function (err, data) { 
         console.log(data); 
         console.log(err ? 'ERROR!' : 'UPLOADED.'); 
        }); 

ET

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'}); 
} 
+0

Merci Jungli. Tu m'as sauvé la vie. – WonderKid

+0

J'ai l'impression qu'il me manque quelque chose de stupide, mais où est-ce que 'file.name' et' file.type' sont définis?Il semble qu'ils devraient être une chaîne (codée en dur) pour le nom de fichier et '" image/jpeg "' pour ContentType? –

Questions connexes