当前位置: 首页 > news >正文

spring(@RequestPart)同时上传表单数据和文件

由于文件上传与普通字段上传的请求头设置不一样,之前都是文件和普通数据分开上传进行处理,这样感觉很不优雅。
后来学到spring找到一种方式可以实现文件与JSON数据同时上传的方法,通过注解@RequestPart来实现,接下来分享给大家。

一、环境配置

1、导入依赖jar包

在pom.xml文件中导入依赖

<dependency>
   <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
</dependency>
2、配置文件上传解析器

在springmvc.xml中配置

<!--处理器映射器,处理器适配器-->
<mvc:annotation-driven/>
<!--文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10000000"/>
</bean>

二、实现代码

1、前端
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("修改失败,请联系系统管理员!");
        }
    }
});
2、后端
@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数据同时上传了

相关文章:

  • 关于23种设计模式的有趣见解
  • Mybatis 批量更新—MySQL设置支持批量更新
  • 清风伴我好读书
  • 设计模式之建造者模式理解
  • Windows Mobile 2nd 开发黄金周(4):Windows Mobile设备编程中的本地存储FAQ
  • 设计模式之桥接模式理解
  • 设计模式之适配器模式理解
  • 今天又一项目采用保证金服务——CSDN外包实践(32)
  • 设计模式之装饰者模式
  • 一本“由厚变薄”的好书
  • 设计模式之组合模式
  • 设计模式之外观模式详解(Facade Pattern)
  • 优化系统七十项Reg文件
  • 设计模式之享元模式详解(FlyWeight Pattern)
  • 设计模式之代理模式详解(Proxy Pattern)
  • [译]Python中的类属性与实例属性的区别
  • codis proxy处理流程
  • JavaScript设计模式与开发实践系列之策略模式
  • js继承的实现方法
  • maya建模与骨骼动画快速实现人工鱼
  • PHP的类修饰符与访问修饰符
  • Python爬虫--- 1.3 BS4库的解析器
  • SpingCloudBus整合RabbitMQ
  • Web Storage相关
  • 爱情 北京女病人
  • 第2章 网络文档
  • 技术:超级实用的电脑小技巧
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • Mac 上flink的安装与启动
  • # C++之functional库用法整理
  • (zhuan) 一些RL的文献(及笔记)
  • (十)c52学习之旅-定时器实验
  • (四)Controller接口控制器详解(三)
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (太强大了) - Linux 性能监控、测试、优化工具
  • ../depcomp: line 571: exec: g++: not found
  • .gitattributes 文件
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET面试题(二)
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C/C++]关于C++11中的std::move和std::forward
  • [CDOJ 1343] 卿学姐失恋了
  • [C语言]——柔性数组
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [HDOJ4911]Inversion
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式
  • [linux]centos7下解决yum install mysql-server没有可用包