因此,目前我正在開發一個簡單的項目,用戶可以將圖片上傳到服務器。之前,我在這裏提到我的問題是我如何做它:如何使用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
文件也需要花費很長時間,我的鼠標點擊需要幾秒鐘才能響應服務器控制檯。
我不知道爲什麼會發生這種情況,我需要將圖像數據作爲多部分發送還是什麼?
所有答覆都讚賞和感謝提前:)
這聽起來像一個完全的Java問題,您可能需要刪除一些標籤上你的問題。 –
我不認爲在'$ .ajax'中有一個'encode'選項,你應該將'processData'和'contentType'都設置爲'false',但是當你發送一個B64時不需要這麼做字符串,而不是實際的圖像 – adeneo
@adeneo我剛剛添加了'processData'和'contentType'值爲false,但沒有運氣仍然有同樣的問題 –