我正在爲使用REST Web服務的主應用程序編寫定製代理作爲Web服務客戶端。出於安全原因,我試圖在客戶端使用一個servlet作爲代理來從服務器端檢索PDF,然後通過客戶端應用程序在應用程序Web瀏覽器中顯示它。自定義代理複製PDF
本作的心臟,我有這樣的一段代碼:
protected void copy(HttpResponse fromResponse, HttpServletResponse toResponse)
throws IOException{
HttpEntity entity = fromResponse.getEntity();
for(Header header:fromResponse.getAllHeaders()){
toResponse.setHeader(header.getName(), header.getValue());
}
BufferedInputStream inputStream = new BufferedInputStream(entity.getContent());
BufferedOutputStream outputStream = new BufferedOutputStream(toResponse.getOutputStream());
int oneByte;
int byteCount = 0;
while((oneByte = inputStream.read()) >= 0){
outputStream.write(oneByte);
++byteCount;
}
log.debug("Bytes copied:" + byteCount);
應的PDF從返回的輸出流複製到當前的輸出流,然後返回。
但是,當我運行它時,我從Adobe Reader收到一條錯誤消息,說該文件已損壞,無法修復。當我直接運行URL時,文件沒問題,所以它必須是切換中的東西。 byteCount等於PDF文件的大小。
有沒有人有一個想法是什麼問題?
outputStream.flush()應該足夠了 – fvu 2013-02-22 17:34:16
outputStream是一個BufferedOutputStream,所以您顯然需要最終刷新緩衝區,無論是顯式還是隱式關閉。 – mkl 2013-02-22 18:57:08