我将有变化的地方加了高亮显示。以ArrayBuffer方式上传图片必须添加'application/octet-stream'的RequestHeader,否则服务器无法响应请求。另外,通过这种方式上传图片我们也无法从表单数据中获取到文件类型,可以将文件类型以query的方式传到服务器,然后服务器根据文件类型来生成对应的文件,以下是经过少量修改之后的服务器代码:
imageUpload.prototype.uploadImageTest = function(req){ var pathName = 'uploadImgs/dealInfo/'; var uploadPath = path.join(__dirname, '../../public/', pathName); return this.useFormParseCallback(req).then(function(files){ var file = files[1].file; var fileType = req.query.filetype ? ('.' + req.query.filetype) : '.png'; var newFileName = 'upload_' + moment().format('x') + Math.random().toString().substr(2, 10) + '.' + fileType; var readStream = fs.createReadStream(file.path); var writeStream = fs.createWriteStream(uploadPath + newFileName); var deferred = Q.defer(); readStream.pipe(writeStream); readStream.on('end', deferred.makeNodeResolver()); return deferred.promise.then(function() { fs.unlinkSync(file.path); return { fileName: newFileName, filePath: 'https://www.jb51.net/' + pathName + newFileName, fileSize: file.size/1024 > 1024 ? (~~(10*file.size/1024/1024))/10 + "MB" : ~~(file.size/1024) + "KB" }; }); }); };
修改之后的代码可以支持Android手机,包括微信浏览器。注意不是所有的Android手机都会存在该问题,如果你发现在Andriod手机上无法上传图片,尤其是在微信浏览器中,则可以尝试下上面的方法。
以上所述是小编给大家介绍的关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法,希望对大家有所帮助!
您可能感兴趣的文章: