Java--springbootプロファイルアップロード(アップロードの進捗を表示)
6741 ワード
1、プロファイル
commons-fileupload
commons-fileupload
1.4
#
spring.http.multipart.enabled=false
#
resource.path=d:\\resources
resource.url=http://10.10.1.124:8088
2、進捗モニターをダウンロードするpackage com.sample.common.upload;
import org.apache.commons.fileupload.ProgressListener;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpSession;
@Component
public class FileUploadProgressListener implements ProgressListener {
private HttpSession session;
public void setSession(HttpSession session) {
this.session = session;
session.setAttribute("upload_percent", 0);
}
@Override
public void update(long pBytesRead, long pContentLength, int pItems) {
int percent = (int) (pBytesRead * 100.0 / pContentLength);
session.setAttribute("upload_percent", percent);
}
}
3、カスタム解像度package com.sample.common.upload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
public class CustomMultipartResolver extends CommonsMultipartResolver {
@Autowired
private FileUploadProgressListener listener;
@Override
protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
String encoding = determineEncoding(request);
FileUpload fileUpload = prepareFileUpload(encoding);
fileUpload.setProgressListener(listener);
listener.setSession(request.getSession());
try {
List fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
return parseFileItems(fileItems, encoding);
}catch (FileUploadException ex) {
throw new MultipartException("Failed to parse multipart servlet request", ex);
}
}
}
4、コンフリクトの設定package com.sample.common.config;
import com.sample.common.upload.CustomMultipartResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
@Configuration
public class BeanConfig {
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver()
{
return new CustomMultipartResolver();
}
}
5、コントローラpackage com.vim.modules.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.util.Calendar;
import java.util.UUID;
@Controller
public class UploadController {
@Value("${resource.path}")
private String resourcePath;
@Value("${resource.url}")
private String resourceUrl;
private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
@RequestMapping(value = "/uploadPage")
public String uploadPage(){
return "uploadPage";
}
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestParam(value = "file") MultipartFile file){
try {
Calendar cal = Calendar.getInstance();
Integer year = cal.get(Calendar.YEAR);
Integer month = cal.get(Calendar.MONTH)+1;
Integer day = cal.get(Calendar.DAY_OF_MONTH);
String destPath = resourcePath + File.separator + year + File.separator + month + File.separator + day + File.separator;
String destUrl = resourceUrl + "/" + year + "/" + month + "/" + day + "/";
logger.info(" :"+destPath);
File destFile = new File(destPath);
if(!destFile.exists()){
logger.info(" , ");
destFile.mkdirs();
}
//
String sourceFileName=file.getOriginalFilename();
String suffix=sourceFileName.substring(sourceFileName.lastIndexOf("."),sourceFileName.length());
logger.info(" :"+sourceFileName);
//
String destFileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
file.transferTo(new File(destPath + destFileName));
return destUrl + destFileName;
}catch (Exception e){
e.printStackTrace();
return "";
}
}
@RequestMapping(value = "/uploadStatus")
@ResponseBody
public Integer uploadStatus(HttpServletRequest request){
HttpSession session = request.getSession();
Object percent = session.getAttribute("upload_percent");
return null != percent ? (Integer) percent : 0;
}
}
6、テストページ
function upload() {
$("#form").ajaxSubmit(function(message) {
});
// 500ms
setInterval(function () {
$.ajax({
type:"get",
dataType: 'json',
url:"/uploadStatus",
success: function(result){
console.log(result)
}
});
}, 500);
return false;
}