如何使用ajax发送大文件?

时间:2016-11-10 21:28:21

标签: javascript java jquery 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);
    }
});

仅供参考:imagedatatosend大小低于5MB且包含所选的文件数据。

基本上会发生什么用户是否使用<input type="file"标签选择图像然后我设置在canvas中绘制的所选文件,将其转换为base64并将其发送到服务器。

Java Server:

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();

我想我可能不需要解释上面代码的作用。但是我面临一些严重的性能问题我的意思是将数据写入hi.jpg文件需要花费一些时间,即使我尝试System.out.println(datareceived);我的鼠标点击在服务器控制台上响应需要几秒钟。

我不知道为什么会这样,我需要将图像数据作为多部分发送还是什么?

所有回复都表示感谢,并提前致谢:)

1 个答案:

答案 0 :(得分:0)

使用XMLHttpRequest和FormData附加文件。它将使用multipart发送并适当地分块。

请参阅:https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects