问题描述:

文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载。但是下载任务正常进行,下载下来的图片却是空

问题代码:

        //从服务器下载一张图片

        //创建字节读取流 从本地读取图片
//获取图片路径
ServletContext context = this.getServletContext();
String path= context.getRealPath("WEB-INF/classes/德拉科.jpg");
FileInputStream fis = new FileInputStream(path); //创建字节输出流 将图片发送给客户端
ServletOutputStream sos = response.getOutputStream();
//处理下载文件名称
String fileName = path.substring(path.lastIndexOf("\\")+1);
//处理文件名称中文乱码问题
String name = URLEncoder.encode(fileName, "utf-8");
//通知浏览器以下载的方式打开文件
response.setHeader("content-disposition", "attachment;filename="+name);
response.setHeader("content-type", "image/jpeg"); //创建字符数组
byte[] arr = new byte[1024];
int len = 0;
if((len = fis.read(arr)) != -1)
{
sos.write(arr, 0, len);
} fis.close();
sos.close();

问题分析:

首先,图片成功保存到本地,说明通过response设置header进行下载是可行的,那么,图片内容为空只能是读写时出现问题

仔细检查,发现在读写部分将while写成了if,导致,写文件只在第一次有效,之后无法写入

问题解决:

将if改为while 
        //从服务器下载一张图片

        //创建字节读取流 从本地读取图片
//获取图片路径
ServletContext context = this.getServletContext();
String path= context.getRealPath("WEB-INF/classes/德拉科.jpg");
FileInputStream fis = new FileInputStream(path); //创建字节输出流 将图片发送给客户端
ServletOutputStream sos = response.getOutputStream();
//处理下载文件名称
String fileName = path.substring(path.lastIndexOf("\\")+1);
//处理文件名称中文乱码问题
String name = URLEncoder.encode(fileName, "utf-8");
//通知浏览器以下载的方式打开文件
response.setHeader("content-disposition", "attachment;filename="+name);
response.setHeader("content-type", "image/jpeg"); //创建字符数组
byte[] arr = new byte[1024];
int len = 0;
while((len = fis.read(arr)) != -1)
{
sos.write(arr, 0, len);
} fis.close();
sos.close();

问题总结:

      //处理下载文件名称
String fileName = path.substring(path.lastIndexOf("\\")+1);
//处理文件名称中文乱码问题
String name = URLEncoder.encode(fileName, "utf-8"); //通知浏览器以下载的方式打开文件
response.setHeader("content-disposition", "attachment;filename="+name);
response.setHeader("content-type", "image/jpeg");
src下文件的路径问题
  Web工程的根目录指的是WebRoot/WEB-INF/classes开始的。java的class文件只能读到这个目录的的文件。如果想读取其他地方的文件,可以用绝对路径
  如果是通过java的class读文件,比如“德拉科”.jpg,只能放到WebRoot/WEB-INF/classes目录下。也就是放到工程src下,会自动编译到WebRoot/WEB-INF/classes目录下的

参考链接:http://blog.csdn.net/zhangqindabendan/article/details/53002544

Web 下载图片为空的更多相关文章

  1. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...

  2. Unity3D教程宝典之Web服务器篇:(第二讲)从服务器下载图片

    转载自风宇冲Unity3D教程学院                                    从Web服务器下载图片 上一讲风宇冲介绍了wamp服务器及安装.这回介绍如何从服务器下载内容至 ...

  3. 用python批量下载图片

    一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...

  4. C++根据图片url下载图片

    需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...

  5. tableView异步下载图片/SDWebImage图片缓存原理

    问题说明:假设tableView的每个cell上的imageView的image都是从网络上获取的数据.如何解决图片延迟加载(显示很慢).程序卡顿.图片错误显示.图片跳动的问题. 需要解决的问题: 1 ...

  6. 用java页面下载图片

    try { //根据String形式创建一个URL对象 String filePath = materialProductWorks.getDownloadImageUrl(); URL url = ...

  7. 【转】java URLConnection从网上下载图片或音乐

    try { //根据String形式创建一个URL对象,   URL url = new URL("http://www.baidu.com");   //实列一个URLconne ...

  8. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  9. 移动web:图片切换(焦点图)

    在web页面上图片切换(焦点图)效果实在是太常见了,PC端.移动端到处都有它的身影. 上次写了个tab选项卡的效果,在这里延续一下,改成图片切换的效果. 如果不需要自动播放,稍微修改下html标签.和 ...

随机推荐

  1. REST easy with kbmMW #3 – SSL

    我在前两篇文章中展示了“REST easy with kbmMW”文章,如何使用kbmMW制作REST服务器,以及如何使用该REST服务器轻松地从数据库返回和存储数据,所有这些都在不到30行的真实数据 ...

  2. [leetcode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历

    题目大意 https://leetcode.com/problems/binary-tree-inorder-traversal/description/ 94. Binary Tree Inorde ...

  3. HDU 3455

    http://acm.hdu.edu.cn/showproblem.php?pid=3435 同下题,只是这题是双向边,同时让我认识到了一个问题,一个图拆点做二分图完美匹配的本质是求该图环的并 htt ...

  4. Java面试通关要点汇总整理【终极版】

    简历篇 请自我介绍 请介绍项目 基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区 ...

  5. 51Nod:1085 背包问题

    1085 背包问题  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为 ...

  6. Python之进程(multiprocessing)

    一.multiprocessing模块简介——进程基于“threading”的接口 multiprocessing模块支持创建进程——使用threading模块相似的API.multiprocessi ...

  7. MySQL Disk--SSD 特性

    ======================================================================= SSD 特性 .随机读能力非常好,连续读性能一般,但比普 ...

  8. adnanh webhook 框架 hook rule

    adnanh webhook 支持一系列的逻辑操作 AND 所有的条件都必须匹配 { "and": [ { "match": { "type" ...

  9. benthos 几个方便的帮助命令

    benthos 的命令行帮助做的是比较方便的,基本上就是一个自包含的帮助文档 全部命令 benthos --help 查询系统支持的caches benthos -list-caches 说明 使用帮 ...

  10. window.open()与window.showModalDialog

    弹出窗口两种方式:    1.window.showModalDialog:      var feature = "dialogWidth:615px;dialogHeight:505px ...