jspで直接バイナリピクチャを出力する

1624 ワード

<%@ page info="Random Image Show"
    pageEncoding="UTF-8" contentType="image/jpg"
    autoFlush="true" buffer="16kb" session="false" import="java.io.FileInputStream"
%><%
String[] imgpaths = {
    "D:/images/testimg1.jpg",
    "D:/images/testimg2.jpg",
    "D:/images/testimg3.jpg"
};
ServletOutputStream sos = response.getOutputStream();
FileInputStream fis = new FileInputStream(imgpaths[(int) (Math.random() * imgpaths.length)]);
byte[] buf = new byte[100];  // 
int len = 0;
while ((len = fis.read(buf)) != -1) {
    sos.write(buf, 0, len);
}
sos.flush();
sos.close();
fis.close();
%>

 
注意:outとの混用中にエラーが発生するため、getoutputStreamを使い切った後に
out.clear();out = pageContext.pushBody();次の例
ファイルコードは次のとおりです.
OutputStream o=response.getOutputStream();//出力ファイル用のバイト配列は、出力ストリームbyte b[]=new byte[500];//ダウンロードしたファイルFile file Load=new File("f:/2000","book.zip");//お客様が使用するファイルの保存ダイアログsetHeader("Content-disposition","attachment;filename="+"book.zip");//お客様に通知するMOMEタイプresponse.setContentType("application/x-tar");//顧客に通知するファイルの長さlong fileLength=fileLoad.length();String length=String.valueOf(fileLength);response.setHeader("Content_Length",length);out.clear();out = pageContext.pushBody();//ファイルを読み込みます.zipは、お客様にFileInputStream in=new FileInputStream(fileLoad)をダウンロードするように送信します.int n=0;while((n=in.read(b))!=-1){o.write(b,0,n);}