2016-11-10 97 views
0

因此,目前我正在開發一個簡單的項目,用戶可以將圖片上傳到服務器。之前,我在這裏提到我的問題是我如何做它:如何使用ajax發送大文件?

客戶:

var dataURL = sendingcanvas.toDataURL("image/*"); 
var imagedatatosend = dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); 
formdata = { 
    'image': imagedatatosend 
}; 

$.ajax({ 
    url: '../receive', 
    type: 'POST', 
    data: formdata, 
    encode: false, 
    success: function(result){ 
     alert(result); 
    } 
}); 

FYI:imagedatatosend大小超過5MB較低且含有正好選擇的文件數據。

基本上會發生什麼是用戶使用<input type="file"標籤選擇圖像然後我將該選定的文件在canvas中繪製,以將其轉換爲base64並將其發送到服務器。

Java服務器:

String datareceived = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); 

byte[] bImg = Base64.decodeBase64(datareceived.getBytes("UTF-8")); 
FileOutputStream fos = new FileOutputStream("hi.jpg"); 
fos.write(bImg); 
fos.close(); 

我想我可能沒有必要解釋什麼上面的代碼一樣。但是我面臨着一些嚴重的性能問題我的意思是,即使我嘗試System.out.println(datareceived);,將數據寫入hi.jpg文件也需要花費很長時間,我的鼠標點擊需要幾秒鐘才能響應服務器控制檯。

我不知道爲什麼會發生這種情況,我需要將圖像數據作爲多部分發送還是什麼?

所有答覆都讚賞和感謝提前:)

+0

這聽起來像一個完全的Java問題,您可能需要刪除一些標籤上你的問題。 –

+0

我不認爲在'$ .ajax'中有一個'encode'選項,你應該將'processData'和'contentType'都設置爲'false',但是當你發送一個B64時不需要這麼做字符串,而不是實際的圖像 – adeneo

+0

@adeneo我剛剛添加了'processData'和'contentType'值爲false,但沒有運氣仍然有同樣的問題 –

回答