首页 > 其他分享 >使用@RequestPart同时上传表单数据和文件(文件与JSON数据同时上传)

使用@RequestPart同时上传表单数据和文件(文件与JSON数据同时上传)

时间:2022-12-07 17:13:59浏览次数:55  
标签:文件 goods formData JSON RequestPart file 上传

前端接口上传文件的时候,通常会将请求header的content-type设置为:multipart/form-data, 或者form表单提交的时候将enctype设置为"multipart/form-data" 。

后端收到请求时由于请求体有@RequestBody 注解标识,通常会用application/json, application/xml处理content-type,此时会报编码格式的问题。

这时候可以使用@RequestPart参数来接收实体对象,@RequestParam来单个接收参数。

@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。

@RequestParam也同样支持multipart/form-data请求。

@RequestParam和@RequestPart的区别是:@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)

代码实现如下

前端:

var formData = new FormData();
// file 为想要上传的文件
formData.append("file", $("#goods_img_input")[0].files[0]);
//goodInfo 里面即为想要传到后端的json数据
var goodInfo = JSON.stringify({
    "goods_id":parseInt($('#goods_id').text()),
    "name": $('#name').val(),
    "price": $('#price').val(),
    "inventory":$('#inventory').val(),
    "details": $('#details').val()
})
formData.append('goods', new Blob([goodInfo],{type: "application/json"}));

//发送ajax请求
$.ajax({
    url: "/goods/addGoods",
    type: "post",
    //忽略contentType
    contentType: false,
    //取消序列换 formData本来就是序列化好的
    processData: false,
    dataType: "json",
    data: formData,
    success: function (res) {
        if (res>0){
            alert("修改成功!");
            window.location.href = "/goods/findAll/1";
        } else {
            alert("修改失败,请联系系统管理员!");
        }
    }
});

后端:

@PostMapping("/updateGoods")
@ResponseBody
public void updateGoods(
        @RequestPart("goods")  Goods good,
        @RequestPart("file")  MultipartFile file) {
    System.out.println("good"+good);
    System.out.println("file"+file);
}

这样就完成了文件与JSON数据同时上传

标签:文件,goods,formData,JSON,RequestPart,file,上传
From: https://www.cnblogs.com/lgee/p/16963633.html

相关文章

  • 使用ajaxFileUpload实现文件异步上传
     最近在项目中遇到要使用ajax提交包含file输入框的表单的情况,网上查了下,发现ajaxFileUpload.js插件的比较多。就研究了下,发现真的不错。传统的包含file输入框的表单提交遇......
  • 第六课 IPFS 星际文件系统入门
    IPFS介绍IPFS的全称是InterPlanetaryFileSystem星际文件系统,是一个点对点的网络超媒体协议。它的目标是成为更快、更安全、更开放的下一代互联网。IPFS尝试解决HTTP目前存......
  • python实现移动二级目录下的文件到一级目录
    python实现移动二级目录下的文件到一级目录importosimportshutilimportsysdefmove_to_work_folder(work_path,cur_path):"""将work_folder下的所有子......
  • Python模块pathlib操作文件和目录操作总结
    前言目前大家常用的对于文件和操作的操作使用 ​​os.path​​ 较多,比如获取当前路径​​os.getcwd()​​,判断文件路径是否存在​​os.path.exists(folder)​​ 等等。......
  • 关于MFC中resource.h头文件中宏的说明
    在写MFC程序时,当需要动态创建一些控件的时候,需要传递一个ID给相应的控件,比如创建一个按钮CButtonm_bnTestButton;m_bnTestButton.Create(_T("我的按钮"),WS_VISIBLE|WS_C......
  • 001- hive文件存储格式
    1.文件存储格式TextFileSequeceFileRCFileORCFilePARQuet2.说明其中TEXTFILE为默认格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;SequenceFile,RCF......
  • 解决vscode中在js文件中报ts检测提示
    1.遇到的问题vscode中在js文件中报ts检测语法提示2.解决方法在设置中查找validate找到Typescript设置,将JavaScript>Validate:enable设置为禁用,或者在setti......
  • .pem文件,.csr文件,.key文件。。。区别
    三、.pem文件,.csr文件,.key文件。。。区别做项目时在阿里云上申请的证书,下载Nginx对应的证书时,发现有两个文件一个以.key结尾,一个以.pem结尾,而自定义生成证书时,发现有三......
  • Linux文件夹执行权限不够怎么办?如何处理?
    在Linux中,文件夹的执行权限不够是非常普遍的情况,那么遇到这种情况该如何处理呢?我们可以通过修改权限来解决该问题,其中比较常用的命令是chmod,接下来我们来看看详细的内......
  • web技术分享| 图片上传与图片裁剪结合 vue3
    需求:上传的图片限制长宽相同;只能上传图片;图片大小限制500k当前项目仅需要上传的图片信息项目组件使用裁剪:vue-cropperimport"vue-cropper/dist/index.c......