使用iview的 Upload组件结合后端spring mvc做的文件上传,发现文本文件格式上传没问题,但上传其他格式的,比如 doc、xls、jar等格式文件,上传到后端后,打开均会提示文件已经损坏(实际情况是文件大小会增大)!
经定位,发现前端上传代码无问题,是Spring mvc 做二进制文件处理时发生了问题,个人估计是编码问题,但后端无异常抛出。
百度一番无果。
后面实在没有办法,只能采用 Html5的 FireReader对象的readAsBinaryString方法,先读取二进制文件的二进制字符串,然后再通过普通ajax提交到后端,后端使用
ByteArrayInputStream bstrm = new ByteArrayInputStream(fileString.getBytes("iso-8859-1"));
转换成二进制流。
完美实现了文件上传,经验证文件格式未损坏。
至于为何spring mvc 上传二进制文件,会导致文件大小变大,因水平有限,望知晓的大牛告知!
附上传文件上传时Header信息,大牛分析下:
host=127.0.0.1:8181
user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
accept=*/*
accept-language=zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
accept-encoding=gzip, deflate
referer=http://192.168.1.92:8080/
content-type=multipart/form-data; boundary=------WebKitFormBoundaryoomkhpTo8AIPyGot
content-length=22049
origin=http://192.168.1.92:8080
connection=keep-alive
表单信息:
------WebKitFormBoundaryoomkhpTo8AIPyGot
Content-Disposition: form-data; name="token"
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbklkIjoiMTU0MTU1NTc1MTAzMyIsImV4cCI6MTU0MTU3NzM1MSwibmJmIjoxNTQxNTU1NzUxfQ.UfrIWHG2Xk8N3Ecp2Aj98InvvAFNuPDvKO6AY04jRQ0
------WebKitFormBoundaryoomkhpTo8AIPyGot
Content-Disposition: form-data; name="editFlag"
true
------WebKitFormBoundaryoomkhpTo8AIPyGot
Content-Disposition: form-data; name="file"; filename="1234.jar"
Content-Type: application/octet-stream
文件内容,乱码
------WebKitFormBoundaryoomkhpTo8AIPyGot--