여기 내가하고있는 일이 있습니다. 스프링 웹 애플리케이션에 Ajax를 통해 멀티 파트 파일을 업로드하고 싶습니다. 서버가 POST 요청을 받으면 데이터베이스에 티켓 번호를 작성합니다. 그런 다음 실제 파일 업로드를 처리하는 스레드를 시작합니다. 그런 다음 서버는 티켓 번호를 반환합니다.비동기 파일 업로드 (스프링)
요청을 처리하기 위해 CommonsMultipartResolver를 사용하고 있으며, Multipart가 즉시 해결되지 않도록 resolveLazily 플래그를 true로 설정했습니다.
그래서 여기 그래서 여기에 포인트가 티켓 번호는 진행 업데이트를 가져 오는 데 사용할 수 있다는 것입니다 내가
@Controller
public class myController{
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public String upload(MultipartHttpServletRequest request, String fileName){
String ticket = dao.createUploadTicket(fileName);
Runnable run = new Runnable(){
@Override
public void run(){
dao.writeUpdate(ticket, "Getting data from request");
final MultipartFile file = request.getFile("theFile");
dao.writeUpdate(ticket, "Multipart file processed");
try {
dao.writeUpdate(ticket, "Saving file to disk");
file.transferTo(new File("/myDirectory"));
dao.writeUpdate(ticket, "File saved to disk");
}
catch(Exception e){
dao.writeUpdate(ticket, "File upload failed with the exception " + e.toString());
}
}
};
Thread t = new Thread(run);
t.start();
return ticket;
}
}
을 가지고있는의 라인을 따라 뭔가. 큰 파일이 업로드되고 있다고 가정 해보십시오. 파일을 POST로 업로드 한 클라이언트 (이 경우 Ajax 요청)는이를 비동기 적으로 수행하고 티켓 번호를 다시받을 수 있습니다. 클라이언트는 티켓 번호를 사용하여 파일 업로드 단계를 결정하고 다른 페이지에 정보를 표시 할 수 있습니다.
다른 사용법은 서버에 모든 티켓 번호를 요청한 HTML 페이지를 가질 수 있으며 서버에서 발생하는 모든 파일 업로드의 "라이브"보기를 보여줍니다.
컨트롤러가 리턴하자마자 Spring은 CommonsMultipartResolver에서 cleanupMultipart()를 호출하기 때문에 이것을 작동시키지 못했습니다. resolveLazily 플래그가 false로 설정되어 있으므로 cleanupMultipart()가 호출되면 멀티 파트 파일을 확인하고 초기화합니다. 이로 인해 "request.getFile ("theFile ");" runnable 및 cleanupMultipart() 호출에서 결국 예외가 발생합니다.
누구든지 아이디어가 있습니까? 백엔드 비동기 파일 처리를 원한다는 이유로 여기에서 HTTP 계약을 위반하고 있습니다.
Commention 비동기 언제 나중에, 티켓의 현재 상태를 가져옵니다. 나는 해결책을 내놓는 것을 도울지도 모른다 뒤에 오는 블로그를 찾아 냈다. http://blog.springsource.org/2012/05/06/spring-mvc-3-2-preview-introducing-servlet-3-async-support/ https://blogs.oracle.com/ enterprisetechtips/entry/asynchronous_support_in_servlet_3 실례를 생각해 보면 다시 게시하겠습니다. – CAL5101