2015-11-18 73 views
2

現在,我通過油畫數據URI字符串如何帆布數據URI上傳到Amazon S3服務器

(數據:圖像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAAAgAElEQVR ..... )

我的hapi(NodeJS)服務器。

我的問題是:

什麼是我的下一個步驟,以「流」 /將此數據上載到Amazon S3和創建一個實際的圖像呢?

+0

所以真正的問題是,你如何從到的NodeJS Amazon S3的上傳。 –

+0

你需要從這個base64圖像創建一個流,並將流上傳到S3 –

+4

如果你已經搜索過,你會發現http://stackoverflow.com/questions/7511321/uploading-base64-encoded-image-to-amazon- s3-via-node-js?rq = 1和http://stackoverflow.com/questions/5867534/how-to-save-canvas-data-to-file/5971674#5971674?讓我猜你甚至沒有搜索。 –

回答

0

發送對象之前到S3,你必須改變的base64緩衝和發送之後,例如:

var buf = new Buffer(b64string, 'base64'); 
s3.putObject({/*some params*/, Body: buf}, function(err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log(data);   // successful response 
}); 

這一點,你將數據發送到S3之後,你將可以打開圖像,而不解碼。

祝你好運!

0
  1. 將您的數據URI存儲在一個可變的。
  2. 創建功能,您的數據URI(64位編碼的字符串)解碼爲字符串(在這裏,我已經創建dataURItoBlob()功能)和解碼返回字符串
  3. 之後傳遞字符串在身體S3上傳功能

    var myDataUri = "data:application/pdf;base64,JVBERi0xLjMKMyAwIG9iago8PC9UeXBlIC9QYW..." 
    
    var myFile=dataURItoBlob(myDataUri); 
    
    function dataURItoBlob(dataURI) { 
        console.log('1: ',dataURI); 
        var binary = atob(dataURI.split(',')[1]); 
        var array = []; 
        console.log('2: ',binary.length); 
        for (var i = 0; i < binary.length; i++) { 
         array.push(binary.charCodeAt(i)); 
        } 
        return new Blob([new Uint8Array(array)], { 
        type: 'application/pdf' 
        }); 
    } 
    
    if (myFile)) { 
        results.innerHTML = ''; 
        var params = { 
        Key: new Date().getTime() + '.pdf', 
        ContentType: 'application/pdf', 
        Body: myFile 
        }; 
    
        bucket.upload(params, function(err, data) { 
        results.innerHTML = err ? 'ERROR!' : 'UPLOADED.: ' + file; 
        }); 
    } else { 
    results.innerHTML = 'Nothing to upload.'; 
    }