SpringMvc支持文件上传功能(每日解决一题)

文章介绍了如何在JavaSpringMVC环境中进行文件上传。首先,需要引入commons-fileupload和commons-io的jar包。然后,创建HTML表单,设置enctype为multipart/form-data以支持文件上传。在Controller层,分别展示了处理文件上传请求的代码,包括设置文件大小限制,保存上传文件到服务器的指定目录,并处理可能的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们通常会用到文件上传的功能在我们的博客上或者要上传图片,今天就来解决这个 问题

文件上传需要jar包我们要引入所对用的jar包

 <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>

其次就是我们对文件上传的页面

这里很简单,如果需要单文件就直接传一个表单就行,如果需要多个的话就要用到多个表单,

我们在使用form表单中必须要加一个 enctype="multipart/form-data",这个是我们支持上传文件所需要的内容

<form action="/file" method="post" enctype="multipart/form-data">
    <input type="file" name="file" /><br /><br />
    <input type="file" name="file" /><br /><br />
    <input type="submit" value="上传" />
</form>

这个是我的跳转文件目录的Controller层

@Controller
@RequestMapping("/function")
public class FunctionController {

    @GetMapping("/file")
    public String File(){
        return "file";
    }

}

这个是我文件上传过后的Controller层

@Controller
public class FileController {
    @RequestMapping("/file")
    public String myFile(HttpServletRequest request, HttpServletResponse response){
        // 创建工厂
        DiskFileItemFactory df = new DiskFileItemFactory();
        // 使用工厂创建解析器对象
        ServletFileUpload fileUpload = new ServletFileUpload(df);
        //设置上传单个文件的的大小
        fileUpload.setFileSizeMax(1024*1024*3);
        //设置上传总文件的大小
        fileUpload.setSizeMax(1024*1024*3*10);
        //设置响应内容的编码
        response.setContentType("text/html;charset=utf-8");
        try {
            // 使用解析器对象解析request,得到FileItem列表
            List<FileItem> list = fileUpload.parseRequest(request);
            // 遍历所有表单项
            for(FileItem fileItem : list) {
                // 如果当前表单项为普通表单项
                if(fileItem.isFormField()) {
                    // 获取当前表单项的字段名称
                    String fieldName = fileItem.getFieldName();
                    //获取参数值
                    String value = fileItem.getString("utf-8");
                    System.out.println(fieldName+" = "+value);
                    //如果是文件表单项
                } else {//如果当前表单项不是普通表单项,说明就是文件字段
                    String fileName = fileItem.getName();//获取上传文件的名称

                    // 获取真实路径,对应${项目目录}/uploads,当然,这个目录必须存在
                    String savepath = request.getServletContext().getRealPath("/uploads");
                    File file = new File(savepath);
                    //如果不存在就创建文件夹
                    if(!file.exists()){
                        file.mkdir();
                    };
                    //判断表单项提否提交了空的参数
                    if(fileName != null && !"".equals(fileName)){
                        //为避免重名生成一个uuid作为文件名的前缀
                        String prefix = UUID.randomUUID().toString().replace("-", "");
                        //将文件写入到服务器中
                        fileItem.write(new File(savepath+"/"+prefix+"_"+fileName));
                    }
                    //清楚文件缓存
                    fileItem.delete();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "file";
    }
}

里面对应好了我们上传文件的操作亲测有效!

这是一个最终的效果 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值