springmvc上传文件(图片)

本文详细介绍如何在SpringMVC+Spring+MyBatis环境中实现文件上传功能,包括必要的依赖包配置、控制器类编写及前端页面设计。

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

环境:springmvc+spring+mybatis
前提环境,需要把ssm框架搭建好,如果没有搭建的话可以先搭建这个框架

然后需要添加jar包
pom里面添加

<!-- 上传组件 -->
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.10</version>
    </dependency>

然后需要在springmvc.xml的配置文件中添加上传的配置文件

<!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->  
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
        <!-- 默认编码 -->  
        <property name="defaultEncoding" value="utf-8" />    
        <!-- 文件大小最大值 -->  
        <property name="maxUploadSize" value="10485760000" />    
        <!-- 内存中的最大值 -->  
        <property name="maxInMemorySize" value="40960"/>    
    </bean>   

然后就可以开干了,
首先是前台页面jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图片上传</title>
</head>
<body>
<form action="/eshop/upload/uploadimg" enctype="multipart/form-data" method="post">
    上传图片:<input type="file" name="file" value="选择图片"><br>
    <input type="submit" value="上传">
</form>
</body>
</html>

后台的controller类:

package com.xiaopengpeng.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
@RequestMapping("upload")
public class UploadController { 
    @RequestMapping("uploadimg")
    public String uploadimg(MultipartFile file) throws Exception{
        String filename = file.getOriginalFilename();
        System.out.println(filename);
        //写入本地磁盘
        InputStream is = file.getInputStream();  
        byte[] bs = new byte[1024];  
        int len;  
        OutputStream os = new FileOutputStream(new File("D:/temp/" + filename));  
        while ((len = is.read(bs)) != -1) {  
            os.write(bs, 0, len);  
        }  
        os.close();  
        is.close();  
        return "ok";
    }
}

完成!

上面的java类上传图片的时候使用的是原生态的上传形式,使用的是底层的java的io流的,其实他们提供封装好的保存形式,所以可以将上面的contriller类该成下面的这个类:

package com.xiaopengpeng.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
@RequestMapping("upload")
public class UploadController {
    @RequestMapping("toUploadimg")
    public String toUploadimg(){
        return "uploadimg";
    }

    @RequestMapping("uploadimg")
    public String uploadimg(MultipartFile file) throws Exception{
        String filename = file.getOriginalFilename();
        file.transferTo(new File("D:/temp/" + filename));

        return "ok";
    }

简单了许多吧,其实这个样子写功能是不完善的,如果不同用户上传的文件名字一样就会把前一个文件给覆盖了,多以名字不能这样就草草的结束,可以在名字上再下下功夫,这些就留给你们自己做吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值