HTTP下载文件名称编码说明

HTTP下载保存文件名

下载文件需要保存的名称 在响应报文头中 Content-Disposition 响应报文头域中指定, 例如

Content-Disposition: attachment; filename*="utf8‘‘%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"

其中filename后指定文件名称。

HTTP规范要求

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html

        content-disposition = "Content-Disposition" ":"
                              disposition-type *( ";" disposition-parm )
        disposition-type = "attachment" | disp-extension-token
        disposition-parm = filename-parm | disp-extension-parm
        filename-parm = "filename" "=" quoted-string
        disp-extension-token = token
        disp-extension-parm = token "=" ( token | quoted-string )

An example is

        Content-Disposition: attachment; filename="fname.ext"

参考 http://haoyu.farbox.com/post/download-header

http://www.phpv.net/html/1675.html

http://blog.angryfox.com/?tag=%E4%B8%8B%E8%BD%BD

兼容性规则

各个浏览器实现的规则又和HTTP规范有些小差异。

给出转码规则代码:

-- 获取文件名
local filename = cgilua.QUERY.IF_FILENAMEUTF8
local encfilename = cgilua.urlcode.escape(filename)
encfilename = string.gsub (encfilename, "+", "%%20") -- tested ‘中文文 件名.txt‘

local useragent = sapi.Request.servervariable"HTTP_USER_AGENT"
local contentdisposition
if useragent then
    if string.match( useragent, "MSIE" )
        -- IE11 伪装成 mozilla, 需要借助Trident关键字区分
        or string.match( useragent, "Trident" ) then
        contentdisposition = ‘attachment; filename="‘ .. encfilename .. ‘"‘
    elseif string.match( useragent, "/Firefox/" ) then
        contentdisposition = "attachment; filename*=\"UTF-8‘‘"..encfilename.."\""
    else
        contentdisposition = ‘attachment; filename="‘ .. filename .. ‘"‘
    end
else
    contentdisposition = ‘attachment; filename="‘ .. filename .. ‘"‘
end
时间: 2024-08-05 19:34:22

HTTP下载文件名称编码说明的相关文章

Java FTP下载文件以及编码问题小结

问题 之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下: 1. 需要传入一个可能为中文的文件名: 2. 通过文件名去FTP上寻找该文件: 3. FTP服务器的命名编码为“GBK”: 思路 1.通过GET方法直接将文件名负载URL后面,但需要通过转码: 2.在Java Controller中收到参数后,进行解码,解码为正常数据: 3.用正常数据再转码为GBK,到Service中去调用FTP即可 4.(因公司安全考虑,我们需要在另一个模块中调用FTP)通过rest接口

Struts2 文件下载(中文处理方法以及控制下载文件名称和扩展名)

Struts2的框架提供了现成的文件下载方式,大大简化的问价下载的使用便利性.网上的列子有很多,我把一些大家普遍比较关注的点,集中一下,给出一个整体方案. 一般我们照着书本或者网上的列子写出了一个Demo,都会存在几个疑问: 1.下载文件的文件名怎么搞?不搞的话浏览器默认名字是提交的action的名字 2.文件名里面想搞中文,但是实际上下载文件名出现了乱码或不显示中文怎么搞? 3.文件的扩展名怎么搞?比如要下载的文件是word(doc,docx)或者excel(xls,xlsx)怎么办?难道让用

Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode

不个网页title保存成个个文件的时候儿有无效字符的问题... 通常两个处理方式::: replace 成个空格或者使用转义(推荐)... windows的文件名称无效字符.../\:* <>\"| 斜杠,反斜杠,冒号,星号,问号,左右的 尖括号,双引号,树杠...而且..."." 一个点和 ".."双点分别用来表示"当前目录"和"父目录", 因此它们也不能作为文件名 Linux的基本上只有反斜杠...

java 下载文件的样例

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 java.io.OutputStream; import java.net.URLEncoder; import java

Java 利用FTP上传,下载文件,遍历文件目录

Java实现FTP上传下载文件的工具包有很多,这里我采用Java自带的API,实现FTP上传下载文件.另外JDK1.7以前的版本与其之后版本的API有了较大的改变了. 例如: JDK1.7之前 JDK1.7 ftpClient = new FtpClinet() ftpClient = FtpClient.create(ip) ftpclient.login(user,password) ftpclient.login(user,null,password) ftpclient.binary()

javaweb下载文件模板

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.HttpServletReque

FTP下载文件

//需要注意的是下载文件时的编码格式需要和FTP服务器的编码格式保持一致.搜索代码中的 this.ftpClient.setControlEncoding("GBK");package net.ssd.publish.web.filter; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream

【331】python 下载文件:wget / urllib

参考:python下载文件的三种方法(去掉-) 方法一:wget import wget, os # 设置下载路径 os.chdir(r"D:/tmp") url="https://files.cnblogs.com/files/alex-bn-lee/ESRI_01.zip" # 获取下载文件名称 filename = wget.detect_filename(url) # 文件下载 wget.download(url) 方法二:urllib import url

分布式进阶 十 linux命令行下载文件以及常用工具 wget Prozilla MyGet Linuxdown Cu

linux命令行下载文件以及常用工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 下面就为大家详细介绍一下这些工具. 1. Wget Wget是一个十分常用命令行下载工具,多数Linux发行版本都默认包含这个工具.如果没有安装可在http://www.gnu.org/software/wget/wget.html 下载最新版本. 1.1 编译安