分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

Web 下载图片为空

发布时间:2023-09-06 01:08责任编辑:蔡小小关键词: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");

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 下载图片为空

原文地址:http://www.cnblogs.com/roxy/p/7464967.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved