我通過這個更多的調試,並添加一個HttpServletRequest
我的控制器方法,看看有沒有什麼可用的。我發現我收到的請求是一個org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest
,它有一個名爲multipartParameters
的字段,它只是一個HashMap
。我發現這張地圖有name
,chunks
和chunk
的密鑰。所以,我決定嘗試以下爲我的簽名:
uploadMedia(@RequestBody MultipartFile file, @RequestParam String name, @RequestParam int chunks, @RequestParam int chunk)
果然,那些@RequestParam
參數得到了與文件,數據塊的數量和塊數名填充(從零開始)分別。將這些信息與每個請求進行比較可以使組合塊成爲最終文件非常容易。
還有一件事要知道的是,如果文件不需要分塊(文件大小小於塊大小),chunks
和chunk
參數不會發送。所以,我最後的簽名結束這樣看:
uploadMedia(@RequestBody MultipartFile file, @RequestParam String name, @RequestParam(required=false, defaultValue="-1") int chunks, @RequestParam(required=false, defaultValue="-1") int chunk)
然後我可以檢查-1,看看我是否需要擔心的分塊的。
因此,在控制器方法本身我有這樣的事情:
Media media = new Media();
//set stuff on my Media object for storing info about the file in the DB
//....
if (chunks > 0 && chunk > 0)
{
//Need to append the bytes in this chunk
mediaRepository.appendBytes(media, file.getBytes());
if (chunk == chunks - 1)
{
//last chunk, upload is done
onUploadFinished(media);
}
}
else
{
//Write out the first set of bytes
mediaRepository.saveBytes(media, file.getBytes());
if (chunks <= 0)
{
//no chunks were needed, all the bytes have been written out, upload is done
onUploadFinished(media);
}
}
是有可能看到更多的控制器呢?我試圖實現相同的功能,並正在努力控制器的其餘部分。 – zmanc
我已經更新了包含更多控制器代碼的答案。 – dnc253
如果你不介意你可以分享一部分你的mediaRepository? – zmanc