Загрузка фрагментированного файла в Java с помощью Spring MVC? - PullRequest
1 голос
/ 06 апреля 2020

В моем проекте мне поручено разработать код, который может обрабатывать большие документы для загрузки. Документы могут быть в формате 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?

Но я вижу много противоречащих им утверждений в самом Переполнении стека.

Как я могу исправить эту проблему?

...