HttpServlet 下载图片中文名乱码问题

项目中用到下载图片,发现带中文图片名称有乱码问题,须将文件名进行URLEncode转码后,方可解决,特此记录

1.图片位置,例子名字命名为中文图片名.jpg.

2.web.xml 事例

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">
    <servlet>
        <servlet-name>download</servlet-name>
        <servlet-class>com.study.servlet.FileServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>download</servlet-name>
        <url-pattern>/down</url-pattern>
    </servlet-mapping>
</web-app>

3.后台Servlet代码,FileServlet.java

 1 package com.study.servlet;
 2
 3 import javax.servlet.ServletContext;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.ServletOutputStream;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.net.URLEncoder;
12
13 public class FileServlet extends HttpServlet {
14     @Override
15     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
16         doPost(req, resp);
17     }
18
19     @Override
20     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
21         ServletContext context = this.getServletContext();
22         //InputStream in = context.getResourceAsStream("/static/images/11258.jpg");
23         InputStream in = context.getResourceAsStream("/static/images/中文图片名.jpg");
24         ServletOutputStream out = resp.getOutputStream();
25         //通过URLEncoder将中文名进行转码
26         resp.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode("中文图片名.jpg","UTF-8"));
27         byte [] buffer = new byte[1024];
28         int len = 0;
29         while((len = in.read(buffer))!= -1){
30             out.write(buffer,0,len);
31         }
32         in.close();
33         out.close();
34
35     }
36 }

4.下载地址:http://localhost:8080/servlet_04_war/down,下载后的名称显示正常

5.pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2
 3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>JavaWebStudy</artifactId>
 7         <groupId>com.study</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11
12     <artifactId>servlet-04</artifactId>
13     <packaging>war</packaging>
14
15     <name>servlet-04 Maven Webapp</name>
16     <!-- FIXME change it to the project‘s website -->
17     <url>http://www.example.com</url>
18
19     <properties>
20         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21         <maven.compiler.source>1.8</maven.compiler.source>
22         <maven.compiler.target>1.8</maven.compiler.target>
23     </properties>
24
25     <dependencies>
26         <dependency>
27             <groupId>javax.servlet</groupId>
28             <artifactId>javax.servlet-api</artifactId>
29         </dependency>
30         <dependency>
31             <groupId>javax.servlet.jsp</groupId>
32             <artifactId>jsp-api</artifactId>
33         </dependency>
34     </dependencies>
35
36     <build>
37         <finalName>servlet-04</finalName>
38
39     </build>
40 </project>

原文地址:https://www.cnblogs.com/HongBingLee/p/12546908.html

时间: 2024-08-30 17:13:01

HttpServlet 下载图片中文名乱码问题的相关文章

flask下载文件中文名乱码终极解决方案python3版本

flask(0.11.2)+python3.6 兼容各个主流浏览器,已经过各种测试(chrome,firefox,safari,IE,Edge) quote是将文件名urlencode化,然后以适应Edge浏览器 from urllib.parse import quote # for python3 # from urllib import quote for python2 @app.route('/file/download/<filename>', methods=['GET']) d

从服务器下载文件中文名乱码解决方法

try { string excelName = Request["excelName"].ToString(); //文件路径 string fileName = Request["fileName"].ToString(); //下载的文件名 if(!(string.IsNullOrEmpty(excelName)|| string.IsNullOrEmpty(fileName))) { Response.Charset = "GB2312"

xpath案例 爬取58出租房源信息&amp;解析下载图片数据&amp;乱码问题

58二手房解析房源名称 from lxml import etree import requests url = 'https://haikou.58.com/chuzu/j2/' headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Mobile Safari/537.

通过HttpURLConnection下载图片到本地(一)

一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片. 二.代码 1.html /* * 下载选中的附件 */ $("#merchantApproval-annes-center-tb .downloadButton").click(function(){ //获取选中的行,此行包含了附件的相关信息 var row = $("#merc

response读取图片+下载图片

读取图片 import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpSer

教你学会下载图片,文档,excel导入导出

Q1:下载图片,文档 --1:Fileio.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p> <a href="Download?filename=images/猴哥.jpg">下

[转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案

时间 2014-04-14 14:33:44  CSDN博客 原文  http://blog.csdn.net/xby1993/article/details/23677375 主题 ServletJSP JSP或servlet中中文乱码的解决方案: 1.以POST请求方式: 在获取请求参数之前设置: request.setCharacterEncoding("utf-8"); 设置输出编码: response.setContentType("text/html;charse

HttpWebRequest下载文件,乱码问题解决方案

写在前面 今天之所以会总结HttpWebRequest下载文件,主要是因为在使用该类下载文件的时候,有些地方需要注意一下,在实际的项目中遇到过这种问题,觉得还是有必要总结一下的.在下载文件时,最常见的就是下载的文件出现乱码. 一个例子 还是以前面介绍的restful接口为例吧,现在我要通过HttpWebRequest请求,来下载图片,可以这样来. api地址为:http://localhost:21074/ImageService/api/1.jpg 关于restful imageservice

HttpURLConnection 传输数据和下载图片

一.传输字符串数据 在Android中HttpURLConnection传输数据是必不可少的,我们继续在"AsyncTask(异步任务)"案例的基础上添加. 案例: 首先我们做一个jsp的服务端,文件名为test1.jsp. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% Stri