java实现下载文件,如果文件名为中文,下载后内容为空,求解释!

java实现下载文件,如果文件名为中文,下载后内容为空,求解释!,第1张

你的path变量的值是怎么来的。如果只是中文慎洞名有问题,可以尝试用URLDecoder.decode来对文件名进行URL编宽岁枯码转换。你debug跟踪下在URL url=new URL(path)这句时,你的雀拆path是什么值,他是否可以访问。

代码一共6句,前4句没问题,运行下载是ok的,

最后一句梁友态有点不明白,为什么用BufferedInputStream?这个是读文件的,不知道你后面是如何写的,难道还要把文件读到内存?在向客户端发送出去告孝??这样的话下载GB级文件内存溢出。

BufferedInputStream和BufferedOutputStream 用橡源了之后,一定要flush(),这样也许会解决你的中文下载报错。

我直接用BufferedOutputStream 下载文件成功,前面是用你的,后面如下:

InputStream in = new FileInputStream(file)// 将文件装换成缓冲流

OutputStream out = response.getOutputStream()// 获取response中得下载对象

BufferedOutputStream bufo = new BufferedOutputStream(out)// 对象转换成字符流

int length = 0 // 读取本地文时,记录本次文件读取内容大小

byte[] buffer = new byte[524288]// 每次推送 512KB

while ((length = in.read(buffer)) != -1) // 读取本地文件,并在存放在buffer 数组

{

bufo.write(buffer, 0, length)// 预备向客户端推送

bufo.flush()// 清空缓存,并立即推送

}

in.close()

out.close()

bufo.close()

不建议写 response.setContentLength(int)大并发时,这个容易出问题。

ISO8859-1是页面上数据传输的格式,

new String(fileName.getBytes("gb2312"),"iso8859-1")

gb2312是你java项目格式(根据实际项目变更),目的是为了将中漏闹兆文返租文件名正确显示在页面上弯拿。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12218721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存