精华内容
下载资源
问答
  • Status2文件下载中文名称乱码处理

    千次阅读 2014-08-14 18:24:54
    Status2文件下载中文名称乱码处理

    Status2文件下载中文名称乱码处理:

    Status2.xml配置:

    <action name="<span style="font-family:FangSong_GB2312;">d</span>ownLoad" class="<span style="font-family:FangSong_GB2312;">xxx</span>.action.NewClass" method="downloadDocument">
    	<result name="success" type="stream">  <span style="font-family:FangSong_GB2312;font-size:18px;"></span><pre name="code" class="html">                <!--<span style="font-family:FangSong_GB2312;">设置</span>-->
                    <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
    		<param name="inputName">inputStream</param>
    
    <!--动态获取文件名称-->
      <param name="contentDisposition">attachment;filename=${fileName}</param><param name="bufferSize">4096</param>
      </result>
    </action>
     说明:
    
    type默认为dispatcher。在处理文件下载的操作时,必须将type显式设置为stream类型
    stream主要向浏览器发送InputStream对象,通常用来处理下载文件,还可用于返回AJAX数据
    接下来就需要设置StreamResult类的三个重要的属性,如下所示
    contentType属性用来指定下载文件的类型,同样可以在Tomcat6.0.20//conf//web.xml文件中查看MIME Type Mappings
    contentDisposition属性用来设定显示的文件名,这是在点击下载链接时显示在提示框中的文件名
    同时它的值的filename=" "所设定的name值也是下载到本地之后的文件的名字
    并且它的写法是固定的filename=" ",这是由HTTP协议所规范的
    inputName属性的值需严格遵守JavaBean规范,它对应着Action中返回inputStream的方法名
    假设inputName设为downFile,则Action中必定有一个返回inputStream的getDownFile()方法
    另外contentDisposition属性可以设定两个值,它的第一个值用来设定文件打开方式,默认的是inline即在浏览器中打开
    也可设定attachment,如<param name="contentDisposition">attachment;filename="Struts2.ppt"</param>
    即无论是什么类型的文件,哪怕是TXT,它也会弹出一个下载框,供用户选择打开或下载


    Java代码:

    private String fileName;
    private String path;
    private InputStream inputStream;
    private String filePath;
    
    public InputStream getInputStream() throws Exception {
    	return new BufferedInputStream(new FileInputStream(filePath), BUFFERED_SIZE);
    }
    public String getFileName() throws UnsupportedEncodingException {
            System.out.println("ISO8859="+new String(fileName.getBytes(), "ISO8859-1"));
            System.out.println("GB2312="+new String(fileName.getBytes(), "GB2312"));
            System.out.println("UTF-8="+new String(fileName.getBytes(), "UTF-8"));
            System.out.println("fileName="+fileName);
            //fileName= java.net.URLEncoder.encode(fileName, "ISO8859-1");
            return new String(fileName.getBytes("utf-8"), "ISO8859-1"); //此处很重要
    }
    

    页面调用:
    <a href="javascript:;" οnclick="javascript:window.location='recruitDownLoad.action';">下载入会申请文档</a>	

     说明:电脑端浏览器简单配置就可以正常,此处主要是手机端文件名称乱码。

    展开全文
  • ie,edge,chrome浏览器中文名文件下载乱码问题处理 在网上查阅资料,以及根据自己这边实际的需求,来解决编码问题,以及在edge遇到的坑,不同的浏览器针对编码也不一样,做一次转码就顺利解决问题了,直接上代码 ...

    ie,edge,chrome浏览器中文名文件下载乱码问题处理

    在网上查阅资料,以及根据自己这边实际的需求,来解决编码问题,以及在edge遇到的坑,不同的浏览器针对编码也不一样,做一次转码就顺利解决问题了,直接上代码

        @ApiOperation(value = "批量合成导出音频下载", notes = "批量合成导出音频下载")
        @RequestMapping(value = "/expoxt/download/file", method = RequestMethod.GET)
        @ApiImplicitParams({
                @ApiImplicitParam(name = "filePath", value = "返回的文件名", dataType = "int", paramType = "query", example = "1.zip", required = true),
                @ApiImplicitParam(name = "taskName", value = "任务Name", dataType = "string", paramType = "query", required = true)
        })
        public ResponseEntity<byte[]> audioDetailTemplateDownloadZip(HttpSession session,String filePath,String taskName, HttpServletRequest request) throws Exception {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            String userAgent = request.getHeader("User-Agent");
            String fileName = taskName + ".zip";;
            if (userAgent.contains("Edge")) {
                //edge浏览器
                fileName = URLEncoder.encode(fileName, "utf-8");
                headers.add("Content-disposition", "attachment;filename="+fileName);
            } else if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
                //IE浏览器处理
                headers.add("Content-disposition", "attachment;filename="+new String(fileName.getBytes("gb2312"), "iso-8859-1"));
            } else {
                //非IE、edge浏览器的处理
                headers.add("Content-disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"), "iso-8859-1"));
            }
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File(filePath)), headers, HttpStatus.OK);
        }

    taskName,前端那边传过来的时候已经做了编码,框架是ssm,打断点查看taskName接收到的值已经解码了,这应该是框架本身解码了,这里特别注意的是edge浏览器,他的中文名需要在编码一次,然后放到header中,这样下载才不会乱码,其他浏览器就需要改变编码就行了

    这里适配中英文下载,主要是想记录下自己遇到的坑,写的比较简单

    展开全文
  • 1、文件生成,文件全名由路径加文件名构成,路径配置在数据库中动态读取,名称由时间加汉字构成。生成 的文件将存放在数据库中配置的路径中 2、前台页面显示出文件列表,点击下载,将文件名传到后台去,后台通过...

    这是我在导出excel文件供用户下载时遇到的:

    流程:
    1、文件生成,文件全名名由路径加文件名构成,路径配置在数据库中动态读取,名称由时间加汉字构成。生成 的文件将存放在数据库中配置的路径中
    2、前台页面显示出文件列表,点击下载,将文件名传到后台去,后台通过读取数据库配置的路径加上传过来的 文件名去寻找该文件
    3、从指定文件中读取数据,设置相关信息,完成下载

     

    中文乱码处理:
    1、生成文件系统的实体文件时,文件名不存放汉字,而是将文件名(不用包括路径)转成Unicode 字符,即,使用URLEncoder.encode("文件名","UTF-8"),然后再去由该名称生成实体文件,当然这样的文件名在服务器上不解码是看不懂的,之所以这么做是为了防止有的服务器对中文编码不同,直接存放通用的Unicode码,解决后顾之忧。当然没有加密过的原来的文件名,也就是大家都认识的文件名还是要保存起来的,比如存到数据库中去,因为页面上显示的是要能看懂的!
    2、前台显示文件名列表,将要下载的文件名传到后台去。传之前要通过js进行加密操作,同样转换成unicode字 符,传到后台之后,后台解密,可以得到正确的中文文件名称,不过此时得到的文件名没什么用,权当看一看文件名对不对吧!因为这时候通过这个文件全名来到服务器上读取文件肯定会报错的,FileNotFoundException,当然,因为你得先把它URLEncoder.encode("文件名","UTF-8"),也就是加密成Unicode码,然后拼上路径,这样才能在服务器中找到对应的文件!
    3、当然文件下载时用户看到的下载列表中你不能直接给Unicode码组成的文件名也不能是乱码,但是幸好,程序会自动处理这一点,你直接response.setHeader("Content-Disposition","attachment;filename="+fileName)就行,其中的fileName是Unicode码的文件名,浏览器会自动给你转换好的!


    中文乱码问题太多了,而且很烦,一个很好的原则就是,不要讲中文名称存放到服务器上,而是用通用的字符代替,你如这里讲的Unicode字符,或者还有一种办法,通过自己定义一种规则,将中文映射成英文存放到服务器上,然后下载的时候再将英文映射成对应的中问,这个过程可以借助Map来做,这样也能很好的防止乱码问题!

    展开全文
  • ①:struts1跟struts2文件上传基本的处理时差不多滴。就整个1的核心码囖。如下: html 页面 form里面一定要设置类型为: enctype="multipart/form-data" java类里面进行一个文件读写即可: inputStream = new ...

    今天上班先博一博,哈哈。。

    ①:struts1跟struts2文件上传基本的处理时差不多滴。就整个1的核心码囖。如下:

    html 页面 form里面一定要设置类型为:

     enctype="multipart/form-data"

    java类里面进行一个文件读写即可:

    inputStream = new DataInputStream(formFile.getInputStream());//文件流读取
    // 输出文件流
    outputLocalStream = new DataOutputStream(new FileOutputStream(
    		new File(filePath + "/" + fileName)));
    byte buffer[] = new byte[bufSize];//设置每次读取的文件流大小  一般默认设置:1024 ;当然了,也可以写其他的。
    while ((inputStream.read(buffer, 0, buffer.length) != -1)) {
    	outputLocalStream.write(buffer, 0, buffer.length);
    }

    ╭︿︿︿╮
    {/ o  o /} 
     ( (oo) )  
      ︶ ︶︶:一、在struts1里面文件的封装对象是formfile,不能使用file,struts2里面才能使用file。

                    二、文件读写操作完成记得关闭文件流。

    ②:struts1和2的文件download时候我们一般是将服务器或者数据库里面的文件取得然后给用户下载,河马如下:

    一、最简单的就是直接用超链接,如:<a href=“http://www.XXX.com/project/downloadFiles/fileOne” >fileOne</a>

    二、利用文件读写,然后把文件流抛出,利用浏览器自己的对流的封装下载文件。

    // ServletContext init
    				ServletContext context = request.getServletContext();
    				// 文件 MimeType的取得
    				response.setContentType(context.getMimeType(fileName));
    				// 文件取得
    				File file = new File(filePath + "/" + fileName);
    
    				if (file.exists()) {
    					// 文件名处理
    					fileDownName = java.net.URLEncoder.encode(fileDownName,
    							"UTF-8").replaceAll("\\+", "%20");
    					String temp = "attachment;filename=\"" + fileDownName
    							+ "\"";
    					//设置header
    					response.setHeader("Content-disposition", temp);
    					// 输出文件流
    					out = response.getOutputStream();
    					// 下载源文件读取
    					bis = new BufferedInputStream(new FileInputStream(file));
    					bos = new BufferedOutputStream(out);
    					byte[] buff = new byte[bufSize];
    					int bytesRead;
    					// writeFile
    					while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
    						bos.write(buff, 0, bytesRead);
    					}
    				}

    ╭︿︿︿╮
    {/ o  o /} 
     ( (oo) )  
      ︶ ︶︶:一、超链接的办法存在很大的风险,所以一般我们不采用这类方法处理。

                    二、文件读写操作完成记得关闭文件流。

     

     

     

     


     

    展开全文
  • 下载文件乱码处理

    2019-11-29 16:34:00
    * @param name 文件名称 * @param userAgent 浏览器标识 * @param charset 编码方式 * @return * @throws UnsupportedEncodingException */ public static String fileNameGarbled(String name, String ...
  • 下载excel文件名字乱码问题处理

    千次阅读 2016-08-29 15:02:40
    /** 需要输出的文件路径 */ private String filePath; /** * 带模板路径的构造器 * * @param templateName * 模板路径 */ public FILEView(String filePath) { this.filePath = filePath; } public ...
  • 文件下载返回乱码处理 vue+axios

    千次阅读 2020-08-07 14:48:48
    文件下载返回乱码处理 vue+axios 后端返回数据流是乱码,可以使用new Blob()这个方法处理,可以解决乱码问题。 1、乱码返回结果如下: 2、解决方法: async postClick() { const res = await axios({ url: '后端...
  • String fileName = "中文的文件名称.xlsx"; response.setContentType("application/octet-stream"); String s = dealFileName(request,fileName); response.setHeader("Content-Disposition", "attachment;filename...
  • web端下载文件,中文名称乱码处理

    千次阅读 2019-03-06 17:57:11
    java web下载文件时,对于文件名称(中文或者特殊字符)由于各个浏览器的差异,会造成乱码现象,此时可如下处理: 1、前端js: fileName = encodeURIComponent(fileName); var reg = new RegExp("’",“g...
  • 文件下载文件名乱码处理

    千次阅读 2017-04-21 16:10:19
    1、jsp文件  response.setContentType("application/x-download");  String filedisplay = bean.getATTACH_TITLE();  String userAgent = request.getHeader("User-Agent");  if (userAgent.contains(
  • 如下在后台代码HttpContext.Current.Response返回文件流前做如下处理即可:  var fileName = "中文文件名.doc";  string modPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);  if
  • Java文件下载/Springmvc文件下载的实现以及需要注意的一些细节问题,完美解决各浏览器的中文文件名乱码问题。欢迎大家讨论交流。
  • // 处理ie和fireFox下载的文件名的乱码问题 public static String fileNameForEveryBrower(HttpServletRequest req, String fileName) { String ret = fileName; try { String agent = req.getHeader("USE....
  • 文件乱码处理

    千次阅读 2020-11-19 23:07:09
    下面分别分析了文件和文件名产生乱码的原因,同时给出对应的解决办法。
  • javaweb下载文件及文件名中文乱码处理
  • 对于Servlet使用ServletFileUpload的文件上传方法,其获取表单中的中文字符串乱码处理网上查到的方法大多无效或繁琐,这里经过查询官方文档后得到一个较为简便的乱码处理方法
  • 文件下载代码如图所示: 2 在网关代码 preFilter 中加入 ============================================= 在接口访问路径上加zuul.即可解决文件上传下载乱码 的问题 ...
  • 文件名为fileName="人员信息表"+sessionid+".xls";: response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-disposition","attachment;filename="+fileName); 这样...
  • 在实现下载功能的时候,如果文件名是中文的,会出现乱码,甚至直接没有文件名,所以需要针对不同浏览器,进行附件的编码处理/** * 下载文件时,针对不同浏览器,进行附件的编码 * @param filename 下载文件名 ...
  • 导出文件中文乱码 /** * 下载文件名中含有中文的处理 * @param req * @param headName * @return * @throws UnsupportedEncodingException */ public static String encodeFileName...
  • @GetMapping("download") @ResponseBody public void download(String fileName, @RequestParam(required = false) String newName, HttpServletResponse response) { String path = path; // C:\\upload\\ ...
  • jspsmart下载中文文件名文件下载之后,文件名是乱码。 上传解决两种办法1,改jspsmart源码2,在上传的html页面添加hidden表单,hidden表单用于上传文件名(javascript获取file表单),之后在处理类SmartUpload....
  • 文件下载名称乱码

    千次阅读 2017-09-21 23:20:09
    手动编码方式下载</h3><br /> <a href="/dowload/dowloadServlet?filename=12-Servlet.rar">12-Servlet.rar</a><br /> 图片20170919180713.jpg
  • String fileName = "解决中文文件名乱码问题.txt"; if (isMSIE){// IE fileName = URLEncoder.encode(fileName, "utf-8"); } else { fileName = new String(fileName.getBytes("utf-8"), "iso-8859-1"); } ...
  • 文件上传和下载是web开发中常遇到的问题,这几天在做一个项目又用到了...一、文件下载处理流程文件下载处理流程其实很清晰,即:1、根据文件名或者文件路径定位文件,具体的策略主要根据自己的需求,总之需要系统能找
  • //解决文件名乱码问题 String filename = fileName ; try{ //判断是否为IE11 //IE11 User-Agent字符串:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko //IE6~IE10版本的User-...
  • React下载文件文件内容乱码

    千次阅读 2019-12-03 15:30:20
    文件下载后内容乱码的主要原因是没有设置responseType,因为构造blob不知道何种原因总是对于构造后的数据是乱码的。   因为存储从服务去返回的二进制文件流就必须要永达blob,但是接口自主构造却不行,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,687
精华内容 35,874
关键字:

下载文件名称乱码处理