Не удается получить временный файл, созданный Javax HttpServlet после загрузки - PullRequest
0 голосов
/ 08 февраля 2019

У меня проблема, которая возникает, только когда веб-приложение упаковано в WAR и установлено на сервере Tomcat - оно не возникает во время разработки.

Что я делаю:

  1. Я получаю Part из HttpServletRequest, который является загруженным файлом:

        Part uploadedFile = null;
        for(Part part: parts) {
            if(part == null)
                continue;
            if(uploadFieldName.equalsIgnoreCase(part.getName())) {
                uploadedFile = part;
                break;
            }
        }
    
  2. Затем я сохраняю этот объект Part для дальнейшего использования (оннельзя использовать сразу).Код немного сложен, но по сути сродни:

    // List of uploaded files pending
    // List declared as:
    // protected List<Part> uploadedFiles;
    synchronized(this.uploadedFiles) {
        this.uploadedFiles.add(uploadedFile);
    }
    
  3. Позже я пытаюсь извлечь файл из другого потока.

    // Assume that the method is synchronized
    Part reqrievedFile = myUploadService.getFileFromArray();
    synchronized(retrievedFile) {
         doSomething(retrievedFile.getInputStream());
    
  4. Наконец, я удаляю файл через 5 минут после использования:

    retrievedFile.delete();
    

При тестировании в Eclipse это работает хорошо, файл доступен, и я могу его обработать.

Но когда эта функция была добавлена ​​в тестовый код и загружена на тестовый сервер Tomcat, тестеры испытывали эту ошибку:

IOException: C: \ apache-tomcat-8.5.34 \ work\ Catalina \ localhost \ Projectname \ upload_9357ad4d_193f_40fc_96d6_b6e4b9e3c82a_00000001.tmp (система не может найти указанный файл)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...