今天项目中实现一个servlet下载文件的功能,保存文件时,文件名出现异常。
研究了一下,做下记录。
servlet代码:
package com.my.servlet;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownLoadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = getServletContext().getRealPath("/") + "/doc";
String fileName =java.net.URLDecoder.decode(request.getParameter("filename"),"UTF-8");
File file = new File(path + "/" + fileName);
// 如果文件存在
if (file.exists()) {
// 设置响应类型及响应头
response.setContentType("application/x-msdownload");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ new String(fileName.getBytes(),"iso8859-1") + "\"");
// 读取文件
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(inputStream);
byte[] bytes = new byte[1024];
ServletOutputStream outStream = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(outStream);
int readLength = 0;
while ((readLength = bis.read(bytes)) != -1) {
bos.write(bytes, 0, readLength);
}
// 释放资源
inputStream.close();
bis.close();
bos.flush();
outStream.close();
bos.close();
} else {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("文件不存在!");
return;
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
前端代码:
<script type="text/javascript">
<!--
function down(){
location.href="down.servlet?filename="+encodeURI(encodeURI('JavaSwing中文.chm'));
}
//-->
</script>
//java后台解码
String fileName =java.net.URLDecoder.decode(request.getParameter("filename"),"UTF-8");
//设置浏览器输出编码
response.setHeader("Content-Disposition", "attachment; filename=\""
+ new String(fileName.getBytes(),"iso8859-1") + "\"");
分享到:
相关推荐
在“struts2 中文文件名文件下载”的场景中,我们需要关注的是如何在Struts2框架下正确处理包含中文字符的文件名。首先,我们要理解文件名编码ISO8859-1,这是一个西欧字符编码标准,不支持中文字符。在处理中文...
### 基于Servlet的文件下载技术解析 #### 一、引言 在Web应用程序开发过程中,文件上传和下载是常见的需求之一。特别是在企业级应用中,用户经常需要下载诸如报告文档、数据备份等文件。Java Servlet作为一种强大...
在处理Web应用中的文件下载功能时,经常遇到的问题之一就是文件名出现乱码,尤其是当文件名包含中文字符时。为了解决这一问题,本文将详细介绍如何通过Java Servlet技术中的response.setHeader()方法来设置正确的...
本篇文章将深入探讨如何使用JSP与Servlet进行文件上传,并特别关注如何解决中文文件名乱码的问题。 首先,我们需要理解文件上传的基本流程。当用户在JSP页面上选择文件并提交表单时,JSP会将文件数据封装到HTTP请求...
在处理文件下载时,尤其是从Web服务器下载带有非ASCII字符的文件名时,这种问题尤为常见。让我们深入探讨这个问题,并提供解决策略。 首先,我们需要了解HTTP协议中的编码规则。在HTTP响应头中,有一个名为`Content...
通过上述实践和调试,我们已经成功解决了Struts2框架下中文文件名上传和下载的乱码问题。在遇到类似问题时,可以按照这些步骤进行排查和修复。记住,关键在于正确配置Struts2的拦截器、请求编码以及在处理文件名时...
解压 【javax.servlet-api-***.jar中文文档.zip】,再解压其中的 【javax.servlet-api-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档...
### Java + JSP + Servlet 实现文件下载技术详解 #### 技术背景及应用场景 在Web应用开发过程中,实现文件的上传与下载是一项常见的需求。Java作为一种广泛使用的编程语言,在结合JSP(JavaServer Pages)和...
在这个特定的实例中,我们利用Smart框架来实现文件的上传和下载功能,同时解决了中文文件名的问题。Smart是一个轻量级的Java Web框架,它简化了处理HTTP请求和响应的过程,特别适合于文件操作。 首先,我们需要理解...
综上所述,通过Servlet实现文件下载功能涉及到设置响应头、读取文件内容、处理中文文件名等多个步骤。结合JSP页面,可以方便地为用户提供下载服务。同时,还需要考虑安全性与性能优化,确保服务的稳定性和效率。
当涉及到文件上传功能时,我们通常会使用第三方库,如SmartUpload,它简化了文件上传的过程,尤其对于处理中文文件名和其他中文参数的情况,SmartUpload表现得更为友好。 SmartUpload是一个强大的文件上传组件,它...
另一个Servlet或JSP页面,根据用户请求生成文件下载链接。 总的来说,这个项目展示了如何在Java和JSP环境中实现文件上传和下载功能,特别是在处理中文文件名时的注意事项。理解并实践这些技术对于任何Java Web...
解压 【javax.servlet-api-***.jar中文文档.zip】,再解压其中的 【javax.servlet-api-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档...
解压 【javax.servlet-api-***.jar中文文档.zip】,再解压其中的 【javax.servlet-api-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档...
在IT行业中,尤其是在Web开发领域,文件下载是一个常见的功能,但遇到中文文件名或文件名包含空格时,可能会出现无法正确显示的问题。本篇博客主要讨论如何解决这些问题。 首先,当用户尝试下载一个文件,服务器...
这个“servlet上传struts下载例子”是一个典型的使用这两种技术来解决中文文件名上传和下载问题的示例。下面将详细阐述相关知识点。 1. **Servlet**:Servlet是Java Servlet API规范定义的一组接口,用于扩展服务器...
标题中的“jspSmartUpload上传中文文件名乱码问题”是一个常见的技术挑战,特别是在处理Web应用程序时,特别是那些涉及用户上传文件的场景。JSP Smart Upload是早期流行的一个用于Java Web应用的文件上传组件,它...
解压 【javax.servlet-api-***.jar中文-英文对照文档.zip】,再解压其中的 【javax.servlet-api-***-javadoc-API文档-中文(简体)-英语-对照版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。...
在Java Web开发中,文件下载是一项常见的功能,尤其在企业级应用中不可或缺。当用户需要获取服务器上的资源,如文档、图片或者视频等,通常会通过点击下载链接触发服务器进行文件传输。本项目针对的一个重要问题就是...
在Java编程语言中,处理中文文件名的上传和下载是一个常见的需求,特别是在开发Web应用程序时。本主题将深入探讨如何在Java环境下实现这一功能,尤其是针对JSP(Java Server Pages)应用。首先,我们来看看标题提到...