JSP下载,response.setContentType("application/x-download")作用?

Sev_Y 发布于 2013/03/21 14:10
阅读 11K+
收藏 0

jsp文件下载中下面这一段代码:

public void localFile(HttpServletRequest request, HttpServletResponse response) throws Exception {

    String file = request.getParameter("file);
    response.reset();
    response.setContentType("application/x-download");
    String filedownload = file;
    String filedisplay = file.substring(file.lastIndexOf("/") + 1);
    filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
    response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
    OutputStream out = null;
    FileInputStream in = null;
    try
    {
        out = response.getOutputStream();
        in = new FileInputStream(filedownload);
        byte[] b = new byte[1024];
        int i = 0;
        while((i = in.read(b)) > 0)
        {
        out.write(b, 0, i);
        }
        out.flush();
    }
    catch(Exception e)
    {
        System.out.println("Error!");
        e.printStackTrace();
    }
    finally
    {
        if(in != null)
        {
        in = null;
        }
        if(out != null)    
        {
        out.close();
        out = null;
        }
    }
 }

我想问一下,其中的response.setContentType("application/x-download");是必须的吗?

 

情况描述:

一开始为了用jsp显示本地图片。加了上述代码。

但是没有加

response.setContentType("application/x-download");

response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);

图片能够正常显示,但是右键图片另存为时失败。下载的是一个localFile.do的文件。(图片url:例如/mypj/localFile.do?file_name=d:/1.png)

后来加了

response.setContentType("application/x-download")

response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);

能够成功下载1.png

但是浏览器有警告:Resource interpreted as Image but transferred with MIME type application/x-download:

于是,把response.setContentType("application/x-download")注释掉。图片可以下载,也没有警告。

所以想问一下,response.setContentType("application/x-download")是必须的吗?它的作用是什么?

真正起到下载作用的是response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);吗?

 

 

 

 

加载中
0
loyal
loyal

1.不是必须,但你要是不写的话,可能会导致浏览器会自动打开某些格式的文件,比如图片.具体的你可以查下mime类型.

2.对.两者都重要.

Sev_Y
Sev_Y
回复 @loyal : 回复 @loyal : 是对应单独的servlet,我图片在本地系统,要通过这个servlet来显示图片(这个不需要response.setContentType),同时能够右键,图片另存为保存图片(这时又需要response.setContentType)。所以现在情况是,加了会警告,同时又因为要下载,最好加上。
loyal
loyal
回复 @Sev_Y : 对于下载应当是个单独的servlet,而不是把下载也放到servlet中.
Sev_Y
Sev_Y
谢谢,但是如果设置了setContentType页面显示警告。怎么处理。
返回顶部
顶部