2012-12-19 18 views
2

我正在構建一個小型圖像縮放工具,用戶首先將圖像上傳到網頁,並在提交該表單時顯示放大的圖像以進行保存。但是,當用戶發送請求以縮放具有不同寬度和高度參數的相同圖像時,會出現問題。在這種情況下,我在servlet中設置的內容處理頭似乎不起作用,第二個請求之後的圖像僅與servlet的類名一起發送,而不是我在內容處置中提到的文件名和擴展名頭。內容 - 處置標題不能正常工作

response.setContentType("image/jpeg"); 
response.setHeader("Content-disposition","inline;filename="+filename); 

我也試過在作家本身,而是我使用doen't的一個硬編碼似乎有文件名

private void doDownload(HttpServletResponse resp, BufferedImage bump, 
      InputStream filecontent) throws IOException { 

     //http://stackoverflow.com/questions/9340569/jpeg-image-with-wrong-colors 
     OutputStream out = resp.getOutputStream(); 
     Iterator<ImageWriter> iter = ImageIO 
       .getImageWritersByMIMEType("image/jpeg"); 
     ImageWriter writer = iter.next(); 
     ImageWriteParam iwp = writer.getDefaultWriteParam(); 
     iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
     iwp.setCompressionQuality(1); 
     ImageOutputStream imgOut = new MemoryCacheImageOutputStream(out); 
     writer.setOutput(imgOut); 
     IIOImage image = new IIOImage(bump, null, null); 
     writer.write(null, image, iwp); 
     out.flush(); 
     out.close(); 
     writer.dispose(); 

    } 

任何參數有沒有什麼辦法可以設置的文件名寫入輸出流時的圖像?

+0

*「顯示放大的圖像」*爲什麼? –

+0

這是因爲我正在寫一個圖像縮放程序,可以提供高質量圖像和較小尺寸圖像的高壓縮:P – Nav

回答

0

在此類中聲明一個靜態整型變量。

private static int fileno=0; 


private void doDownload(HttpServletResponse resp, BufferedImage bump, 
      InputStream filecontent) throws IOException { 

Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); 
ImageWriter writer = (ImageWriter)iter.next(); 
ImageWriteParam iwp = writer.getDefaultWriteParam(); 
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
iwp.setCompressionQuality(1); 
String OUTPUTFILE = "C:/Users/Harish/Desktop/jpegFile"+fileno++; 
File file = new File(OUTPUTFILE); 
//Your fileName will be jpegFile0; and next time jpegFile1 and so on. 
FileImageOutputStream imgOut = new FileImageOutputStream(file); 
writer.setOutput(imgOut); 
IIOImage image = new IIOImage(bump, null, null); 
writer.write(null, image, iwp); 
writer.dispose(); 

} 
+0

感謝您的回答,但我並未將其寫入硬盤驅動器位置......因爲我直接將其寫入到瀏覽器..實際上,我正在從http響應中檢索輸出流resp.getOutputStream() – Nav

+0

將文件名附加到輸出流似乎不適用於我:( – Nav

+0

我剛剛給你的想法(保存它的名稱) 。爲什麼它不能爲你工作?任何錯誤? –