Метод HTTP POST Джерси, повреждающий нетекстовые файлы - PullRequest
0 голосов
/ 27 августа 2018

У меня есть метод HTTP POST, который отлично работает, если я загружаю текстовые файлы. Но если я попытаюсь загрузить документ Word, PDF, ZIP, GZIP и т. Д. ... загруженные файлы будут повреждены в процессе. Я использую Почтальон для отправки запроса. Я делаю метод "POST", ввожу URL, добавляю заголовки (пробовал всевозможные заголовки, и это действительно ничего не меняет, так что теперь у меня нет ввода), а затем в теле я выбираю "formdata" и выбираю файл. Мне просто нужно это исправить, чтобы иметь возможность поддерживать файлы, заканчивающиеся на .csv.gz и .csv. В настоящее время csv в порядке, но .csv.gz - это тип, который портит. Я пробовал и другие нетекстовые файлы, просто чтобы посмотреть, что происходит, и они тоже портятся. Я не могу понять, есть ли какая-то кодировка, фильтр и т. Д. ... что приводит к тому, что это может произойти, что я могу удалить, или какой-то параметр, который мне нужно применить. Или, если есть другой способ обработать это с помощью трикотажа, чтобы нетекстовые файлы остались такими же, как и в исходном файле.

Мое приложение работает под управлением Spring v1.5.3 и Jersey 2.25.

    @Override
public Response uploadTopicFile(String topic, FormDataMultiPart formDataMultipart) throws Exception {
    List<BodyPart> bodyParts = formDataMultipart.getBodyParts();

    // Getting the body of the request (should be a file)
    for (BodyPart bodyPart : bodyParts) {
        String fileName = bodyPart.getContentDisposition().getFileName();
        InputStream fileInputStream = bodyPart.getEntityAs(InputStream.class);
        String uploadedFileLocation = env.getProperty("temp.upload.path") + File.separator + fileName;
        this.saveFile(fileInputStream, uploadedFileLocation);
        String output = "File uploaded to : " + uploadedFileLocation;
        log.debug(output);
    }
    return Response.status(201).build();
}

    private void saveFile(InputStream uploadedInputStream, String serverLocation) {
    try {

        // Create the output directory
        Files.createDirectories(Paths.get(serverLocation).getParent());

        // Get the output stream
        OutputStream outputStream = new FileOutputStream(new File(serverLocation));
        int read = 0;
        byte[] bytes = new byte[1024];

        // Loop through the stream
        while ((read = uploadedInputStream.read(bytes)) != -1) {
            // Output to file
            outputStream.write(bytes, 0, read);
        }

        // Flush and close
        outputStream.flush();
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return;
}

1 Ответ

0 голосов
/ 17 сентября 2018

Был фильтр, вызывающий повреждение. Фильтр обновлен, и проблема решена.

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