В моем проекте мне поручено разработать код, который может обрабатывать большие документы для загрузки. Документы могут быть в формате pdf, image и т. Д. c Мне нужно получить этот файл и сохранить его в базе данных. Клиент будет React, и реакция будет отправлять данные в виде фрагментов. Код бэкэнда написан на Java с Spring MVC. В настоящее время он не отправляет его как чанк, и это вызывает проблемы с памятью в браузере.
Сценарий базового c состоит в том, что пользователь будет загружать большой файл, например, 200 МБ, а внешний интерфейс будет отправлять его в виде небольших пакетов на сервер ie, как куски.
В настоящее время все, что у нас есть,
@RequestMapping(value = "/intake/{channel}/attachment", method = RequestMethod.POST)
@ResponseBody
public JsonResponse uploadAttachment(final MultipartHttpServletRequest request,
@PathVariable(name = "xxxx") String xxxxx, final HttpSession session,
@RequestParam(name = "xxxxx", required = false, defaultValue = "") String xxxxx,
@RequestParam(name = "xxxxxx", required = false, defaultValue = "") String xxxxxx,
@RequestParam(name = "unzip", required = false, defaultValue = "true") boolean unzip,
@RequestParam(name = "xxx",required = false) String xxx) {
JsonResponse jsonResponse = new JsonResponse();
List<String> docsetIds = new ArrayList<>();
List<String> parentDocsetIds = new ArrayList<>();
WorklistActionResponse response = null;
boolean isLiterature = false;
try {
List<MultipartFile> files = request.getFiles("attachment");
if (files != null) {
String rootURL = CommonUtils.getRootURL(request);
for (Iterator iterator = files.iterator(); iterator.hasNext();) {
MultipartFile multipartFile = (MultipartFile) iterator.next();
FileContent fileContent = new FileContent();
fileContent.setContentLength(multipartFile.getSize());
fileContent.setContentType(multipartFile.getContentType());
fileContent.setInputStream(multipartFile.getInputStream());
fileContent.setName(multipartFile.getOriginalFilename());
String filePath = multipartFile.getOriginalFilename();
String filePathParts[] = filePath.split("/");
String fileName = filePathParts[filePathParts.length - 1];
String fileParts[] = fileName.split("\\.");
String fileExtension = fileParts[fileParts.length - 1];
fileContent.setFileExtention(fileExtension);
DocumentDetail subDocumentDetail = documentService.saveAttachment(
new NewAttachmentRequest(channel, groupId, rootURL, docsetId, fileContent), userId);
if (subDocumentDetail == null) {
throw new NotSupportedException();
}
if (subDocumentDetail != null) {
subDocumentDetails.add(subDocumentDetail);
}
}
}
}
}
Здесь документ будет получен по запросу Multipart. Этот код не служит цели
У меня есть следующие вопросы:
1, достаточно ли составного запроса для обработки фрагментированных данных.
2, Что будет изменение / изменение, которое я должен сделать, когда данные поступают в блок ie, небольшие пакеты данных будут поступать до тех пор, пока загрузка не будет завершена.
Я нашел несколько похожих ответов в переполнении стека fileupload с использованием блоков и MultipartFileupload
разница между протоколом multipart и chunked
Как получить загрузку файла весной mvc, используя как multipart / form, так и chunked encoding?
Но я вижу много противоречащих им утверждений в самом Переполнении стека.
Как я могу исправить эту проблему?