Загруженный файл .txt через POSTMAN повреждается (добавляется с помощью Content-Disposition, Content-type) JAX-RS - PullRequest
0 голосов
/ 20 декабря 2018

Приветствую сообщество!В настоящее время я разрабатываю RESTful web service в Java с использованием библиотеки JAX-rs.Я хотел бы, чтобы клиенты могли загружать файлы через сервис.Мне удалось это сделать, используя следующий фрагмент кода

@Consumes({"application/json"})
@Produces({"application/json"})
@Path("uploadfileservice")
public interface UploadFileService {

   @Path("/fileupload")
   @POST
   @Consumes(MediaType.MULTIPART_FORM_DATA)
   Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream)
}

Класс реализации

@Service
public class UploadFileServiceImpl implements UploadFileService {

@Override
public Response uploadFile(InputStream uploadedInputStream){
String fileToWrite = "//path/file.txt" //assuming a upload a txt file
writeToFile(uploadedInputStream, fileToWrite); //write the file
}

private void writeToFile(InputStream uploadedInputStream,
    String uploadedFileLocation) {

    try {
        OutputStream out = new FileOutputStream(new File(
                uploadedFileLocation));
        int read = 0;
        byte[] bytes = new byte[1024];

        out = new FileOutputStream(new File(uploadedFileLocation));
        while ((read = uploadedInputStream.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }
        out.flush();
        out.close();
    } catch (IOException e) {

        e.printStackTrace();
    }

 }
}

Я использую POSTMAN в качестве клиента для тестирования моеговеб-службы, и я столкнулся со следующей проблемой: Когда я загружаю файл .txt, к этим файлам добавляются некоторые другие сведения о файле

Пример:

Файлотправлено

file sent

Запрос почтальона

postman request

Файл, хранящийся в моей файловой системе

file stored

Есть идеи, почему это происходит?Может быть, я что-то упустил в разделе Headers моего запроса?Или, может быть, возникла какая-либо проблема из-за MediaType, который я потребляю в моей конечной точке веб-службы?

Заранее благодарен за любую помощь:)

PS

Если я загружаю файл .pdf, он не приводит к повреждению, а файл .pdf обычно хранится в моей файловой системе

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Наконец, я нашел решение для моей проблемы, используя Attachment класс org.apache.cxf:

@Consumes({"application/json"})
@Produces({"application/json"})
@Path("uploadfileservice")
public interface UploadFileService {

@Path("/fileupload")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
Response uploadFile(@Multipart("file") Attachment attr)
}



@Service
public class UploadFileServiceImpl implements UploadFileService {

@Override
public Response uploadFile(Attachment attr){
String pathToUpload= "//path//.txt"
try{
  attr.transferTo(new File(pathToUpload)); //will copy the uploaded file in 
  //this destination
}
catch(Exception e){

}

}
0 голосов
/ 20 декабря 2018

Ваша подпись метода должна быть

Response uploadFile(@FormDataParam("file") FormDataBodyPart uploadedFile)

, и вы можете получить содержимое файла как

InputStream uploadedInputStream = uploadedFile.getValueAs(InputStream.class)

Надеюсь, это поможет.

...