SpringMVCでファイルアップロードを実現


方法1:フォームで提出し、比較的オリジナルのファイルアップロード方法
準備工作
使用しているのはMaven項目で、jarパッケージを追加してすべて依存すればいいです.
    
        UTF-8
        1.3.3
        2.5
         1.10
        


  
    
            commons-fileupload
            commons-fileupload
            ${commons-fileupload.version}
    
    
            commons-io
            commons-io
            ${commons-io.version}
    

     
            commons-codec
            commons-codec
            ${commons-codec.version}
     
フロントエンドコード:



    
    Title


    



$("#uploadBtn").click(function () { /** * $("#uploadForm") JQuery * $("#uploadForm")[0] JQuery DOM * @type {FormData} */ var formData = new FormData($("#uploadForm")[0]) $.ajax({ url:"/file/fileUpload.action", type:"POST", data:formData, async:false, cache:false, contentType:false, processData:false, success:function (result) { console.log(result); }, error:function (error) { console.log("error:"+error); } }) })
コントローラ処理コード:
package com.hxy.controller;

import com.aliyun.oss.OSSClient;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.net.URL;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

@Controller
public class FileUpLoadController {

    @RequestMapping(value = "/file/fileUpload.action")
    public String fileUpload(HttpServletResponse response, HttpServletRequest request){
    //        
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload( factory );
    //      
    upload.setHeaderEncoding( "UTF-8" );

    List fileList = null;
    try {
        //        
        fileList = upload.parseRequest( request );
    } catch (FileUploadException e) {
        e.printStackTrace();
    }
    Iterator iterator = fileList.iterator();
    //           ,           
    while (iterator.hasNext()){
        FileItem item = iterator.next();
        //               
        if(!item.isFormField()){
            //    
            String fieldName = item.getFieldName(); //        ,  input name  
            //   XXX.doc
            String fileName = item.getName();
            //       
            String suffix = fileName.substring( fileName.lastIndexOf( '.' ) ); //.doc
            //     ,      
            long id = new Date().getTime();
            //      
            String savePath = request.getServletContext().getRealPath( "img" );
            //      
            String fileUrl = String.format( "%s/%d%s",savePath,id,suffix);
            File file = new File( fileUrl );
            try {
                //    
                item.write( file );
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else {
            String fieldName = item.getFieldName();
            String value = item.getString();
            System.out.println(fieldName +"->"+value);
        }
    }
    return null;
}
}
注意事項:ファイルをアップロードするディレクトリにはファイルが必要です.IDEA開発ツールはターゲットディレクトリをコンパイルしないとファイルをアップロードできません.
方法1:フォームを使って提出し、MultiiprtFileオブジェクトを使ってファイルアップロードを実現する.
この方法は比較的簡単で、コード量が比較的少ないです.
フロントエンドコード:



    
    Title


バックエンドコントローラコード:
package com.huadian.controller;

import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Controller
public class UploadFileController {
    @RequestMapping(value = "/file/uploadFile.action")
    public void uploadFile(MultipartFile multipartFile, HttpServletRequest request) throws IOException {
        //     
        String fileName = UUID.randomUUID().toString().replace( "-", "" );
        String path = request.getServletContext().getRealPath( "/img/" ); //C://xx/img
        //    jpg
        String extension = FilenameUtils.getExtension( multipartFile.getOriginalFilename() );
        // C://xx/img/aa.jpg  linux:/url/tomcat/webapp/AAA/13cd.png
        File file = new File( path + fileName + "." + extension );
        //    
        multipartFile.transferTo( file );
        //   URL     
        //  :http://xxx:8080/img/+   fileName + "." + extension

    }

}
SpringMVCプロファイル