Java で再開可能なファイル アップロード システムを完全に実装しようとしています。私が使用しているライブラリは resumable.js で、ファイルのチャンクを送信して保存.part
し、最後にそれらをマージします。リクエストを受け取ったら、メソッドPOST
でリクエストを受け取り、それを に保存してから、それを使用して必要なすべてのデータを取得します。ただし、ファイルを保存すると、ファイルが空になり、サイズが 0 バイトになります。doPost
HttpServletRequestWrapper
.part
確認したところ、データはすべて揃っているようですが、データを保存できないようです。私が間違って実装したものはありますか?
このタスクを実行するために使用するコードの小さなスニペットを次に示します。
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
ファイル自体は空で保存されています。
それで、私はこれを間違った方法で処理しましたか?私はこれを正しく機能させるのに苦労してきました。