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标签.和 ...
随机推荐
- REST easy with kbmMW #3 – SSL
我在前两篇文章中展示了“REST easy with kbmMW”文章,如何使用kbmMW制作REST服务器,以及如何使用该REST服务器轻松地从数据库返回和存储数据,所有这些都在不到30行的真实数据 ...
- [leetcode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历
题目大意 https://leetcode.com/problems/binary-tree-inorder-traversal/description/ 94. Binary Tree Inorde ...
- HDU 3455
http://acm.hdu.edu.cn/showproblem.php?pid=3435 同下题,只是这题是双向边,同时让我认识到了一个问题,一个图拆点做二分图完美匹配的本质是求该图环的并 htt ...
- Java面试通关要点汇总整理【终极版】
简历篇 请自我介绍 请介绍项目 基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区 ...
- 51Nod:1085 背包问题
1085 背包问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为 ...
- Python之进程(multiprocessing)
一.multiprocessing模块简介——进程基于“threading”的接口 multiprocessing模块支持创建进程——使用threading模块相似的API.multiprocessi ...
- MySQL Disk--SSD 特性
======================================================================= SSD 特性 .随机读能力非常好,连续读性能一般,但比普 ...
- adnanh webhook 框架 hook rule
adnanh webhook 支持一系列的逻辑操作 AND 所有的条件都必须匹配 { "and": [ { "match": { "type" ...
- benthos 几个方便的帮助命令
benthos 的命令行帮助做的是比较方便的,基本上就是一个自包含的帮助文档 全部命令 benthos --help 查询系统支持的caches benthos -list-caches 说明 使用帮 ...
- window.open()与window.showModalDialog
弹出窗口两种方式: 1.window.showModalDialog: var feature = "dialogWidth:615px;dialogHeight:505px ...