java浏览器文件下载和图片显示(流形式)

转载 2016年06月01日 10:48:46

浏览器文件下载:如果你想在浏览器中实现下载功能--一些原本不默认下载的文件,如: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中显示。



原文地址:http://www.cnblogs.com/wxxian001/archive/2013/04/24/3040648.html

浏览器文件下载和图片显示(流形式)

浏览器文件下载:如果你想在浏览器中实现下载功能–一些原本不默认下载的文件,如:jpg、xml等。 图片显示(流形式):如果你想在浏览器中显示图片,而图片不是一个静态文件(没有url地址) ...
  • wuhualong1314
  • wuhualong1314
  • 2013年08月18日 16:22
  • 682

java 文件实现 文件下载 io流下载

public void saveFile(){ //文件地址 try { HttpServletResponse response = ServletActionContex...
  • liujava621
  • liujava621
  • 2014年07月24日 16:19
  • 770

JAVA实现文件下载,浏览器端得到数据流没生产文件

JAVA实现文件下载,浏览器端得到数据流没生产文件 。
  • WUWENJINWUWENJIN
  • WUWENJINWUWENJIN
  • 2017年05月18日 14:32
  • 1760

以流的形式将文件写入页面,直接下载

try { OutputStream out = response.getOutputStream(); response.reset(); response.setHeader("con...
  • u014411966
  • u014411966
  • 2016年08月30日 10:41
  • 805

spring使用文件流形式下载文件

网上关于java文件下载的代码不计其数,我在使用spring做文件下载时,开始也是使用的普通的下载方式,但是遇到一个问题,后台老是报错:java.net.SocketException: Connec...
  • lhjlhj123123
  • lhjlhj123123
  • 2012年06月06日 15:51
  • 3248

将图片作为流直接输出到浏览器

% // 如果你想将输出包含在一个jsp中,可以用img标签调用本jsp // // 图片来源, 从文件(file)或数据库(database) String fro...
  • cm4ever
  • cm4ever
  • 2004年10月20日 17:26
  • 2982

java中的IO流实现文件的复制下载

public HttpServletResponse download(String path, HttpServletResponse response) {         try {    ...
  • m0_37704670
  • m0_37704670
  • 2017年10月13日 09:42
  • 102

java 用流的方式下载文件

String filename = null;java.io.BufferedInputStream bis = null;java.io.BufferedOutputStream bos = nul...
  • zhonghua2003
  • zhonghua2003
  • 2006年11月16日 13:22
  • 871

Java 文件下载原理 + Struts2文件下载原理 详解:~~Myself

###struts2 完成文件下载: 1.首先明确基础知识:InputStream与FileInputStream等都是对内存而言, 那么文件输入流一定是向内存输入流,这对文件下载是有用的。 本...
  • Shb_derek
  • Shb_derek
  • 2013年01月25日 18:07
  • 2443

通过字节流方式实现文件下载以及其中的编码问题

关键代码 页面代码
  • qq_15788801
  • qq_15788801
  • 2016年07月02日 00:42
  • 1056
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java浏览器文件下载和图片显示(流形式)
举报原因:
原因补充:

(最多只允许输入30个字)