Загрузка файлов в спокойные веб-сервисы

Мое требование: я должен отправить 10-мегабайтный zip файл клиенту с помощью успокоительной службы. Я нашел код на форумах, что лучший способ для отправки объекта StreamingOutput, но как я могу создать объект StreamingOutput в следующем коде:

@Path("PDF-file.pdf/")
@GET
@Produces({"application/pdf"})
public StreamingOutput getPDF() throws Exception {
  return new StreamingOutput() {
     public void write(OutputStream output) throws IOException, WebApplicationException      
     {
        try {
            //------
        } catch (Exception e) {
            throw new WebApplicationException(e);
        }
     }
  };
}

Ответ 1

Это лучший способ и простой способ для загрузки файлов.

private static final String FILE_PATH = "d:\\Test2.zip";
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile() {
    File file = new File(FILE_PATH);
    ResponseBuilder response = Response.ok((Object) file);
    response.header("Content-Disposition", "attachment; filename=newfile.zip");
    return response.build();

}

Для вашего кода, как вы просили:

@GET
@Path("/helloWorldZip") 
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public StreamingOutput helloWorldZip() throws Exception {
    return new StreamingOutput(){
    @Override
        public void write(OutputStream arg0) throws IOException, WebApplicationException {
            // TODO Auto-generated method stub
            BufferedOutputStream bus = new BufferedOutputStream(arg0);
            try {
                //ByteArrayInputStream reader = (ByteArrayInputStream) Thread.currentThread().getContextClassLoader().getResourceAsStream();     
                //byte[] input = new byte[2048];  
                java.net.URL uri = Thread.currentThread().getContextClassLoader().getResource("");
                File file = new File("D:\\Test1.zip");
                FileInputStream fizip = new FileInputStream(file);
                byte[] buffer2 = IOUtils.toByteArray(fizip);
                bus.write(buffer2);
            } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
        }
    };
}

Ответ 2

Я попробовал тот же код, упомянутый выше, но вместо zip файла я получаю download.json, загруженный, когда я нажимаю на URL веб-сервиса прямо в браузере.

Ответ 3

Use of ResponseBuilder

@GET
@Path("/getOrder")
@Produces("application/pdf")
public Response getOrderFile(@RequestParam("orderNumber") String orderNumber) {
String filePath = "/" + orderNumber + ".pdf";
File file = new File(filePath);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition",
    "attachment; filename="+orderNum'enter code here'ber+".pdf");
return response.build();

}