我正在尝试用 Java 完全实现可恢复的文件上传系统。我正在使用的库是 resumable.js,它发送文件块以另存为.part
,然后在最后将它们合并在一起。当我收到POST
请求时,我会在我的doPost
方法中接受请求,将其保存到 aHttpServletRequestWrapper
中,然后使用它来获取我需要的所有数据。但是,当.part
我保存文件时,最终它们是空的并且大小为 0 字节。
我检查过,似乎数据都在那里,但我似乎无法保存数据。有什么我实施不正确的吗?
这是我用来执行此任务的一小段代码:
public void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
HttpServletRequestWrapper wrapReq = new HttpServletRequestWrapper(request);
BufferedReader reader = wrapReq.getReader();
/**
* Get some data from the BufferedReader
*/
if(ServletFileUpload.isMultipartContent(wrapReq)){
File mkd = new File(temp_dir);
if(!mkd.isDirectory())
mkd.mkdirs();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Iterator<FileItem> iter = upload.parseRequest(request).iterator();
OutputStream out;
out = new FileOutputStream(new File(dest_dir));
while(iter.hasNext()){
try {
FileItem item = iter.next();
IOUtils.copy(item.getInputStream(), out);
logger.debug("Wrote file " + resumableIdentifier + " with chunk number "
+ resumableChunkNumber + " to " + temp_dir);
out.close();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
}
}
}
tryCreateFileFromChunks(temp_dir, resumableFileName, resumableChunkSize, resumableTotalSize);
} catch (Exception e) {
e.printStackTrace();
}
}
该tryCreateFileFromChunks()
方法只是检查所有部分是否都存在并合并它们。这不是问题。.part
文件本身存储为空。
那么,我是否以错误的方式处理了这个问题?我一直在努力让它正常工作。