SpringMVCでファイルアップロードを実現
6607 ワード
方法1:フォームで提出し、比較的オリジナルのファイルアップロード方法
準備工作
使用しているのはMaven項目で、jarパッケージを追加してすべて依存すればいいです.
方法1:フォームを使って提出し、MultiiprtFileオブジェクトを使ってファイルアップロードを実現する.
この方法は比較的簡単で、コード量が比較的少ないです.
フロントエンドコード:
準備工作
使用しているのは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プロファイル