【求助】postman上传文件,后端获取的filename不对
后端采用egg框架进行编写。获取文件使用stream的方式。
const fileStream = await ctx.getFileStream();
console.log(fileStream);
前端用vue+elementui
<el-upload
ref="iptEcport"
class="upload-ems"
action="/userapi/uploadexcel?type=2"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
name="upfile"
:headers="{
'x-csrf-token': csrfToken
}"
:show-file-list="false"
:before-upload="beforeUpload"
:on-success="uploadSuccess"
:on-error="uploadError"
>
这样获取输出流,里面的中文文件名是正常显示的。
使用postman进行测试的时候,请求是这样的。
这样请求得到的流中filename是乱码。
不知道是不是postman哪里操作有问题呢?有没有大佬给解答一下
2 回复
postman发送请求的时候,会额外增加一个filename
后端的处理请求的模块底层依赖 https://github.com/mscdex/busboy
https://github.com/mscdex/busboy/blob/master/lib/types/multipart.js#L152
这里处理文件名
打印一下parsed
[ 'form-data',
[ 'name', 'file' ],
[ 'filename', 'è°ç .xlsx' ],
[ 'filename', '调研.xlsx' ] ]
最后使用的是filename,所以造成文件名乱码
正常的浏览器请求 不会额外增加filename
@jiangli373 太牛逼了老哥,我也看到了这个追加的filename了,但我当时的想法是在postman中修改header的Content-Disposition参数,但是不生效。 我自己后面是使用浏览器版的postman,就没有问题了。