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

相关文章推荐

Android快速开发-选项卡

介绍几行代码实现Android选项卡界面,支持标准底部Tab自定义视图选项卡,头部文字选项卡。...
  • yissan
  • yissan
  • 2017年06月05日 15:24
  • 1868

ie浏览器无法显示jpg的图片

现象:ie浏览器在html代码正确的情况下,不显示图片,搜狗浏览器正常显示。 原因:据说,jpg的图片也分为CMYK和RGB两种不同的模式,而我是用的ie9似乎恰好不支持CMYK模式。 解决:1:直接...

java以Blob形式存储,读取图片并在jsp页面显示图片流

      废话少说代码伺候:封装好的ImageUtil类:目的读取本地的图片文件并存入数据库,然后读出数据库中以Blob形式存储的图片保存到指定目录。package org.blog.util; ...
  • wkcgy
  • wkcgy
  • 2011年04月30日 20:33
  • 4479

使用java下载http形式的图片

用于下载http形式的图片 以下是自定义的DownUtil类: import java.io.*; import java.net.*; public class DownUtil { ...

java 利用 poi 生成 Excel文件与spring使用文件流形式下载文件

本文为结合参考资料整合而来。 第一步导包: 三个jar: poi poi-ooxml poi-ooxml-schemasmaven: 3.12 ...

[JAVA]Swing、事件监听、文件的初级综合。简易图片浏览器,逸雨清风XIUXIU。

JAVA的SWING、事件处理和文件打开,与VS各有千秋。 图片浏览应用,打开图片,按钮和键盘控制当前文件夹里上下一张图片,将所有图片缩放成适合屏幕显示的尺寸。 //发现一个问题是好像有内存溢...

使用XML布局文件和java代码共同控制UI界面做一个简易图片浏览器

使用XML布局文件和java代码共同控制UI界面做一个简易图片浏览器 本代码实现图片点击切换和通过按钮点击切换图片的功能: photo.xml代码如下: ...

java导出文件之Excel(CSV)下并以流形式输出

网上找太多,眼逗看累了。自己写个简单的  @Test     public void write(){     try {              // 创建CSV写对象     List ls=n...

整理java文件下载(中文乱码、火狐浏览器乱码、空格变+号、文件名包含空格时文件名可能显示不全等问题)

首先感谢网上各路大仙提供的资料:(参考如下) Java文件下载处理中文名(使用URLEncoder编码及空格变+解决);FIREFOX 下载中文文件名出现乱码的java解决方案;用火狐浏览器下载中文...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java浏览器文件下载和图片显示(流形式)
举报原因:
原因补充:

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