下面是用於編寫使用StreamingOutput類使用JAX-RS的球衣流REST API的源代碼。
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
@Path("/download")
public class JerseyService
{
@GET
@Path("/pdf")
public Response downloadPdfFile()
{
StreamingOutput fileStream = new StreamingOutput()
{
@Override
public void write(java.io.OutputStream output) throws IOException, WebApplicationException
{
try
{
java.nio.file.Path path = Paths.get("C:/temp/test.pdf");
byte[] data = Files.readAllBytes(path);
output.write(data);
output.flush();
}
catch (Exception e)
{
throw new WebApplicationException("File Not Found !!");
}
}
};
return Response
.ok(fileStream, MediaType.APPLICATION_OCTET_STREAM)
.header("content-disposition","attachment; filename = myfile.pdf")
.build();
}
}
注意:如果你打的網址,你將看到在你的瀏覽器下載文件的警報。 PDF文件將被保存的文件名將是您在Response.header()
方法中設置的內容。
感謝回覆,但這項工作很好,當你從瀏覽器做一個簡單的獲取請求,但它不起作用,當我們使用angularjs和休息客戶端進行相同的api請求 –