SpringMVC之文件上传

本文详细介绍了如何在Spring MVC框架中实现文件上传功能,包括配置MultipartResolver、设计前端表单及后端文件接收处理。文章提供了具体代码示例,如配置文件上传解析器、前端表单设计和后端控制器实现。
摘要由CSDN通过智能技术生成

一、配置

使用Spring的文件上传功能,需要在文件上下文中配置MultipartResolver。

在配置文件中添加如下一段,我们可以在Bean定义中配置上传文件大小等属性。

<!-- 文件上传 -->
   <!-- 定义文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 设定默认编码 -->
    <property name="defaultEncoding" value="UTF-8"></property>
    
    <!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
    <property name="maxUploadSize" value="5242880"></property>
    
    <!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
    <property name="maxInMemorySize" value="40960"></property>
    
    <!-- 上传文件的临时路径 -->
    <property name="uploadTempDir" value="fileUpload/temp"></property>
    
    <!-- 延迟文件解析 -->
    <property name="resolveLazily" value="true"/>
</bean>

二、设计前端表单进行文件上传

<form action="http://localhost:8080/systemSettings/advance/fileUpload.do" id="domeform" method="post" enctype="multipart/form-data">
    <input type="file" name="file" value="选择文件"/><br>
    <input type="text" name="advanceAdmin" value="advanceAdmin"/><br>
    <input type="text" name="advancePersion" value="advancePersion"/><br>
    <input type="text" name="kId" value="kId"/><br>
    <input type="submit" value="表单提交"/>
</form>

三、后端对文件进行接收

@RestController
@RequestMapping("/systemSettings/advance")
@ResponseBody
public class AdvertisementController {

    @Autowired
    private AdvanceService advanceService;


    /**
     * 广告文件上传接口
     * @deprecated 通过表单上传时,form标签需要加上 enctype="multipart/form-data" 属性
     *
     * 上传的文件需要设置  name="file"
     *
     * 示例:
     *  <form action="http://localhost:8080/systemSettings/advance/upload.do" id="domeform" method="post" enctype="multipart/form-data">
     *     <input type="file" name="file" value="选择文件"/>
     *     <input type="submit" value="表单提交"/>
     * </form>
     *
     *
     * @param file 由表单上传文件
     * @return String 成功返回新的文件名,失败返回“失败”
     */
    @RequestMapping(value = "/fileUpload.do")
    public String uploadFile(@RequestParam("file") MultipartFile file,Advertisement advertis){

        // 文件原名称
        String fileName = file.getOriginalFilename();

        // 原来的文件名
        String suffix = fileName.substring(fileName.lastIndexOf('.'));

        // 加上时间戳生成新的文件名
        String newFileName = new Date().getTime() + "_" + fileName;

        // 文件存储路径
        String path = "D:\\demo\\cloud_demo\\src\\main\\resources\\upload\\advance\\";
        File newFile = new File(path + newFileName);

        // 将广告的其他信息放入pojo保存到数据库中
        Advertisement advertisement = new Advertisement();
        advertisement.setkId(advertis.getkId());
        advertisement.setAdvancePersion(advertis.getAdvancePersion());
        advertisement.setAdvanceAdmin(advertis.getAdvanceAdmin());
        advertisement.setAdvanceTime(new Date(System.currentTimeMillis()));
        // 数据库中存储的是新文件的名字
        advertisement.setContent(newFileName);
        advanceService.insert(advertisement);

        try {
            file.transferTo(newFile);
            return newFileName;
        }
        catch (Exception e){
            e.printStackTrace();
            return "失败";
        }
    }
}

需要注意参数中定义的@RequestParam("file")必须对应到前端表单中上传文件的name属性的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值