admin管理员组文章数量:1619748
浏览器文件下载:如果你想在浏览器中实现下载功能–一些原本不默认下载的文件,如:jpg、xml等。
图片显示(流形式):如果你想在浏览器中显示图片,而图片不是一个静态文件(没有url地址)
那我们应该怎么做呢?
分析:
浏览器获得文件是通过http协议的,
所以只要我设置好请求(request)返回的响应(response)的一些信息应该就行了,
那就是设置响应(response)头的一些信息喽。
解决:
浏览器文件下载设置:
Content-Type:application/octet-stream // 未分类的二进制数据
Content-Disposition:attachment;filename=yourFileName //附件形式处理,文件名为yourFileName
Content-Length:yourFile.length //文件的大小
而文件以流形式输出为浏览器就行了。
这样浏览器就能识别该文件是通过附件的形式下载的了。
java的servlet代码:
public HttpServletResponse getFile(String path,HttpServletRequest request, HttpServletResponse response) {
try {
File file = new File(request.getRealPath("/")+"/"+path);
String filename = file.getName();
InputStream fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}
java的restlet主要代码:
final byte[] bpmnBytes = //文件流字节;
Disposition disposition = new Disposition(Disposition.TYPE_ATTACHMENT);
disposition.setFilename(fileName);
OutputRepresentation output = new OutputRepresentation(org.restlet.data.MediaType.APPLICATION_OCTET_STREAM) {
public void write(OutputStream os)
throws IOException
{
os.write(bpmnBytes);
os.flush();
}
};
output.setDisposition(disposition);
return output;
图片(流形式)显示设置:
Content-Type:image/jpeg // jpeg、jpg、jpe、jfif形式的图片
Content-Length:yourImg.length //图片大小
而图片以流形式输出为浏览器就行了。
java的servlet代码:
public HttpServletResponse getImage(String path,HttpServletRequest request, HttpServletResponse response) {
try {
File file = new File(request.getRealPath("/")+"/"+path);
String filename = file.getName();
InputStream fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
// 设置response的Header
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("image/jpeg");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}
java的restlet主要代码:
final byte[] result = //图片流字节;
return new OutputRepresentation(MediaType.IMAGE_PNG) {
public void write(OutputStream os)
throws IOException
{
os.write(result);
os.flush();
os.close();
}
};
这样浏览器就能正确识别该图片,并在浏览器中识别出来。
当然也可以是img标签的src中显示。
版权声明:本文标题:浏览器文件下载和图片显示(流形式) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726895864a1089109.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论