1. 程式人生 > >springmvc上傳檔案(圖片)

springmvc上傳檔案(圖片)

環境: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";
    }

簡單了許多吧,其實這個樣子寫功能是不完善的,如果不同使用者上傳的檔名字一樣就會把前一個檔案給覆蓋了,多以名字不能這樣就草草的結束,可以在名字上再下下功夫,這些就留給你們自己做吧