1. 程式人生 > 實用技巧 >06-SpringMVC之檔案上傳

06-SpringMVC之檔案上傳

檔案上傳

傳統的檔案上傳(使用commons-fileupload元件)

匯入jar包

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

JSP程式碼

<form action="file/fileupload" method="post" enctype="multipart/form-data">
    選擇檔案:<input type="file" name="upload"><br>
    <input type="submit" value="上傳檔案">
</form>

controller程式碼

//流程:JSP部分上傳檔案-->使用commons-fileupload元件解析上傳的檔案-->將解析後的檔案寫入磁碟
@Controller
@RequestMapping("/file")
public class FileUploadController {
    @RequestMapping("/fileupload")
    public String fileUpload(HttpServletRequest request) throws Exception {
        System.out.println("檔案上傳");
        //使用fileupload元件完場檔案上傳
        //上傳位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        File file = new File(path);
        //判斷該路徑是否存在
        if(!file.exists()){
            //建立資料夾
            file.mkdirs();
        }
        //解析request物件,獲取上傳檔案項
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
        //解析request
        List<FileItem> list = fileUpload.parseRequest(request);
        System.out.println(list.size());
        //遍歷
        for (FileItem item:list){
            //判斷當前item物件是否是上傳檔案項
            if(item.isFormField()){
                //說明是普通表單項
            }else {
                //說明是上傳檔案項
                //獲取上傳檔名稱
                String filename = item.getName();
                //把檔案的名稱設定為唯一值,uuid
                String uuid = UUID.randomUUID().toString().replace("-", "");
                filename = uuid + "_" + filename;
                //完成檔案上傳
                item.write(new File(path,filename));
                //刪除臨時檔案
                item.delete();
            }
        }
        return "success";
    }
}

SpringMVC的檔案上傳

匯入jar包

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>

配置檔案解析器

<!--在spring-mvc.xml中配置-->
<!--配置檔案解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--單位位元組,此處為10*1024*1024B(10MB)-->
    <property name="maxUploadSize" value="10485760"></property>
</bean>
@Controller
@RequestMapping("/file")
public class FileUploadController {
    //注意引數中的MultipartFile upload,變數名必須與JSP的檔案上傳標籤中name屬性名相同
    @RequestMapping("/fileupload")
    public String fileUpload(HttpServletRequest request, MultipartFile upload) throws Exception {
        System.out.println("spring-mvc檔案上傳");
        //使用fileupload元件完場檔案上傳
        //上傳位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        File file = new File(path);
        //判斷該路徑是否存在
        if(!file.exists()){
            //建立資料夾
            file.mkdirs();
        }
        //說明是上傳檔案項
        //獲取上傳檔名稱
        String filename = upload.getOriginalFilename();
        //把檔案的名稱設定為唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid + "_" + filename;
        //完成檔案上傳
        upload.transferTo(new File(path,filename));
        return "success";
    }
}