У меня есть метод 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;
}