【求助】postman上传文件,后端获取的filename不对
发布于 2 年前 作者 974806047 5463 次浏览 来自 问答

后端采用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"
>

这样获取输出流,里面的中文文件名是正常显示的。

结果1

使用postman进行测试的时候,请求是这样的。

内容

header

这样请求得到的流中filename是乱码。

结果2 不知道是不是postman哪里操作有问题呢?有没有大佬给解答一下

2 回复

postman发送请求的时候,会额外增加一个filename image.png

后端的处理请求的模块底层依赖 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,所以造成文件名乱码

正常的浏览器请求 image.png 不会额外增加filename

@jiangli373 太牛逼了老哥,我也看到了这个追加的filename了,但我当时的想法是在postman中修改header的Content-Disposition参数,但是不生效。 我自己后面是使用浏览器版的postman,就没有问题了。

回到顶部