我正在开发一个用户必须上传文件的Web应用程序。 在将其发送到服务器之前,我需要在客户端修改该文件。
以下是加载文件的代码:
var reader = new FileReader();
reader.onload = function(file) {
var arrayBuffer = reader.result;
byteArray = new Uint8Array(arrayBuffer);
//modify byteArray
//replace the file data with the modified byteArray
}
reader.readAsArrayBuffer(file);
是否可以用修改后的byteArray替换文件数据?
答案 0 :(得分:2)
您无法更改File对象,因为它代表用户本地文件系统上的文件。但是,您可以从修改后的数组缓冲区中创建新的Blob:
var uploadBlob = new Blob(arrayBuffer);
然后只需使用FormData上传此uploadBlob代替原始File对象:
var uploadData = new FormData(),
request = null;
upload.append('fileData', uploadBlob);
request = new XMLHttpRequest();
request.open("POST", "http://yourURL.com");
request.send(formData);
(显然,请记住添加任何需要的处理程序来处理您的请求和响应。)
唯一的问题是浏览器支持(基本上是IE10 +):