Web 下载图片为空
问题描述:
文件下载功能是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");
参考链接:http://blog.csdn.net/zhangqindabendan/article/details/53002544
Web 下载图片为空的更多相关文章
- 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签
第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...
- Unity3D教程宝典之Web服务器篇:(第二讲)从服务器下载图片
转载自风宇冲Unity3D教程学院 从Web服务器下载图片 上一讲风宇冲介绍了wamp服务器及安装.这回介绍如何从服务器下载内容至 ...
- 用python批量下载图片
一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...
- C++根据图片url下载图片
需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...
- tableView异步下载图片/SDWebImage图片缓存原理
问题说明:假设tableView的每个cell上的imageView的image都是从网络上获取的数据.如何解决图片延迟加载(显示很慢).程序卡顿.图片错误显示.图片跳动的问题. 需要解决的问题: 1 ...
- 用java页面下载图片
try { //根据String形式创建一个URL对象 String filePath = materialProductWorks.getDownloadImageUrl(); URL url = ...
- 【转】java URLConnection从网上下载图片或音乐
try { //根据String形式创建一个URL对象, URL url = new URL("http://www.baidu.com"); //实列一个URLconne ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- 移动web:图片切换(焦点图)
在web页面上图片切换(焦点图)效果实在是太常见了,PC端.移动端到处都有它的身影. 上次写了个tab选项卡的效果,在这里延续一下,改成图片切换的效果. 如果不需要自动播放,稍微修改下html标签.和 ...
随机推荐
- 设计Popup Window
设计一个Popup window, 在其中实现分享到Facebook 和Twitter 功能. popup window 名称为 ShareView.xaml, 代码如下: <phone:Pho ...
- C程序第四次作业
作业要求一 实践最简答的项目wordcount,必须完成其中的基本功能,若可以完成其他功能给予加分.完成后请将你的设计思路.主要代码写在本次作业博客里. 设计思路: 第一步:定义文件型指针变量fp,整 ...
- 20155301 2016-2017-2 《Java程序设计》第9周学习总结
20155301 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC全名Java DataBase Connectivity,是联机数据库的标准规范.具 ...
- hdu2060-2062
hdu 2060 斯诺克,读懂题意直接模拟 #include<stdio.h> int main(){ int N; ]; a[]=; ;i<=;i++){ a[i]=(-i)*i/ ...
- Finally什么时候会被执行
PS:有return意味着程序结束,他一定会在程序结束前执行: PS: return返回前 会把数据存储到指定的位置,基本类型是不会改变的.引用类型是会影响修改的值的
- js操作链接url
使用js对当前的URL进行操作,可以使用内置对象window.location: window.location有以下属性: window.location.href:取得当前地址栏中的完整URL,可 ...
- 进程间通信--POSIX消息队列
相关函数: mqd_t mq_open(const char *name, int oflag); mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, si ...
- [NN] 对于BackPropagation(BP, 误差反向传播)的一些理解
本文大量参照 David E. Rumelhart, Geoffrey E. Hinton and Ronald J. Williams, Learning representation by bac ...
- jwt 的使用
jwt 是什么 ? json web token 的 简称,是一种无状态的 认证机制 原理:客户端 向服务器端请求一个 jwt 生成的 token ,这个token 带有 一些信息,下次 客户端 ...
- mysql常用语法操作
一.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...