【上传文件】同时上传文件和json对象(踩坑记录)

685 阅读1分钟

1.后端给我个一接口,哎嘿?!我是蒙蔽的,有文件还有json

6b9558f0cd7d94e4cb02bfdf8b3d64b.png

2.怎么搞都不通 加请求头么?携带参数么?都不对.....

06490d4fd2fe02fce4fc08afec194f4.png

3.参数被转换了,后端也会报错,Current request is not a nultipart request 当前请求不是非部分请求

5b23b180c1881ce03436cc7b686cb9f.png

f062b63e0a816cae216ca45add524ba.png

4.搞了半天才明白什么意思

1).【前端如何将文件和对象作为参数同时传到后台呢?】

2). FormData对象是为序列化表以及创建与表单格式相同的数据提供便利。可以通过formdata添加数据。它是以key value形式的键值对。Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。 通常可以用于声音、视频等多媒体文件的存储。

3).

 async handleSuccess2(file) {
            console.log(file, "upload");
            let formData = new FormData(); //声明一个FormDate对象
            //file.raw很关键,如果没有加raw的话,传到后台的file为null
            formData.append('file', file.raw);
            let req = {
                salesManId: this.salesManId
            }
            // blob转file:将 JSON 字符串转化为 Blob 对象
            const blob = new Blob([JSON.stringify(req)], { type: 'application/json;charset=utf-8' });
            formData.append('req', blob);
            const res = await this.$http.post("highSea/importCustomer", formData)
            console.log(res);
            if(res.code==200){
                
            }
        },

4.附后端代码

    // Controller层
    @PostMapping("/saveFile")
    public AjaxResult saveFile(@RequestPart  @Validated StudentDto dto, @RequestParam(required = false, value = "file") MultipartFile file) {
        try {
            fileService.saveFile(dto, file);
            return AjaxResult.success();
        } catch (Exception e) {
            log.info("保存文件失败, " + e.getMessage());
            return AjaxResult.error();
        }
    }
    ```