- 浏览: 971068 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
custjcy:
不错,赞一个。尤其是这个,在查找指定目录下,列出所有包含某个字 ...
shell命令的批量修改文件内容 -
qw173795180:
你好,请问Start这个参数怎么使用不了?
视频播放flv player的使用 -
cheeruplc:
xml进行修改之后 刷新请求 不执行 看了你的博文解决 ...
同一页面无法多次使用XmlHttp发起Ajax请求的真实原因--l转 -
dongbiying:
没有想到还有map的概念
js数组的操作及数组与字符串的相互转化 -
wangtuda:
打酱油的~
js中随机排序
通常使用以下代码就能导出为流的文件,而不是打开文件
webserver支持下载的函数:
但是,如果fileName是UTF-8编码的,比如文件名为测试.html;
ie这时就搞些小情绪,文件名变成了乱码了
在RFC2231的定义里面, 多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*="utf8''%E6%B5%8B%E8%AF%95.html"
即:
filename后面的等号之前要加 *
filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
所以这时应该对文件名进行url编码转换 ,使用urlencode很轻松就搞定了
因此,以上代码应该加上url编码转换
websWrite(wp, T("HTTP/1.1 200 OK\n")); websWrite(wp, T("Pragma: no-cache\n")); websWrite(wp, T("Cache-control: no-cache\n")); websWrite(wp, T("Content-Length: %ld\n"),sbufs.st_size); websWrite(wp, T("Content-Type: application/force-download\n")); websWrite(wp, T("Content-Type: application/vnd.ms-excel; charset=utf-8\n")); // websWrite(wp, T("Content-type: application/octet-stream\n")); websWrite(wp, T("Content-Transfer-Encoding: binary\r\n")); websWrite(wp, T("Content-Disposition: attachment; filename=\"%s\"\n\n"),pname);
webserver支持下载的函数:
/** * @brief URLEncode 对字符串URL编码 * * @param str 原字符串 * @param strSize 原字符串长度(不包括最后的\0) * @param result 结果缓冲区的地址 * @param resultSize 结果缓冲区的大小(包括最后的\0) * * @return: >0:resultstring 里实际有效的长度 * 0: 解码失败. */ int URLEncode(const char* str, const int strSize, char* result, const int resultSize) { int i; int j = 0;//for result index char ch; if ((str==NULL) || (result==NULL) || (strSize<=0) || (resultSize<=0)) { return 0; } for ( i=0; (i<strSize)&&(j<resultSize); ++i) { ch = str[i]; if (((ch>='A') && (ch<'Z')) || ((ch>='a') && (ch<'z')) || ((ch>='0') && (ch<'9'))) { result[j++] = ch; } else if (ch == ' ') { result[j++] = '+'; } else if (ch == '.' || ch == '-' || ch == '_' || ch == '*') { result[j++] = ch; } else { if (j+3 < resultSize) { sprintf(result+j, "%%%02X", (unsigned char)ch); j += 3; } else { return 0; } } } result[j] = '\0'; return j; } #define BUFFER_SIZE 2048 static void downloadFiles(webs_t wp, char_t *path, char_t *query) { char _filePath[1024]={0},encodFilename[1024]={0}; char *fileName,*file_path,*browser,*pname; unsigned char data[BUFFER_SIZE]={0}; char err_msg[256]; long count; struct stat sbufs; FILE *src; fileName = websGetVar(wp, T("downFileName"), T("")); file_path = websGetVar(wp, T("download_path"), T("")); browser = websGetVar(wp, T("browserType"), T("")); //浏览器类型 sprintf(_filePath,"/media%s",file_path); memset(&sbufs,0,sizeof(sbufs)); src = fopen(_filePath, "r"); if (!src) { websWrite(wp, T("HTTP/1.1 200 OK\nContent-type: text/plain\nPragma: no-cache\nCache-Control: no-cache\n\n")); sprintf (err_msg, "Can't fopen %s: %s\n", _filePath, strerror(errno)); websWrite(wp,T("%s"),err_msg); websDone(wp, 200); goto error; } if(!strcmp(browser,"IE")){ URLEncode(fileName, strlen(fileName), encodFilename, sizeof(encodFilename)); pname=encodFilename; }else{ pname=fileName; } stat(_filePath, &sbufs); websWrite(wp, T("HTTP/1.1 200 OK\n")); websWrite(wp, T("Pragma: no-cache\n")); websWrite(wp, T("Cache-control: no-cache\n")); websWrite(wp, T("Content-Length: %ld\n"),sbufs.st_size); websWrite(wp, T("Content-Type: application/force-download\n")); websWrite(wp, T("Content-Type: application/vnd.ms-excel; charset=utf-8\n")); // websWrite(wp, T("Content-type: application/octet-stream\n")); websWrite(wp, T("Content-Transfer-Encoding: binary\r\n")); websWrite(wp, T("Content-Disposition: attachment; filename=\"%s\"\n\n"),pname); while ((count = fread(data, 1, BUFFER_SIZE, src)) > 0) { websWriteBlock(wp, data, count); } fclose(src); error: return; //websDone(wp, 200); }
但是,如果fileName是UTF-8编码的,比如文件名为测试.html;
ie这时就搞些小情绪,文件名变成了乱码了
在RFC2231的定义里面, 多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*="utf8''%E6%B5%8B%E8%AF%95.html"
即:
filename后面的等号之前要加 *
filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
所以这时应该对文件名进行url编码转换 ,使用urlencode很轻松就搞定了
因此,以上代码应该加上url编码转换
发表评论
-
防火墙实现URL过滤原理
2014-05-08 18:45 4276对于URL过滤:1.HTTP URL过滤 2.https UR ... -
C实现urlencode&urldecode
2013-12-28 16:20 5930static unsigned char char_to_he ... -
c语言实现urlencode
2013-12-28 16:19 1976#include <stdio.h> #inc ... -
wifidog+authpuppy认证页面的配置
2013-10-29 02:15 3403转自:http://blog.sina.com.cn/s/ ... -
atoi() & itoa()&atol()<oa()函数的实现
2013-05-01 13:53 3005#include "stdio.h" ... -
详解sigaction --转
2013-04-20 03:31 11215详解sigaction 这是挺好理解的,就好比在系 ... -
Linux定时器的使用 --转
2013-04-20 01:13 1381使用定时器的目的无非是为了周期性的执行某一任务,或者是到了 ... -
Linux C 函数参考(日期时间) --转
2013-04-20 00:03 11383Linux C 函数参考(日期时间) 1.1 概述 世 ... -
对(*(volatile unsigned long *)) 的理解
2013-03-20 15:10 1479对(*(volatile unsign ... -
Linux内核模块概述 --转
2013-01-08 10:43 2379Linux内核模块概述 . Linux 内 ... -
linux上搭建pppoe-server
2012-12-28 15:53 8734记录下过程,主要还是参 ... -
Ubuntu上架设PPPoE Server--转
2012-12-28 01:25 7414一。安裝 PPPoE Server Software ... -
移植rp-pppoe到s3c2440实现ADSL拨号上网--转
2012-12-28 01:22 3199一:总的来说可以分 ... -
Linux下C语言实现文件拷贝--转
2012-11-01 23:11 13945Linux下C语言实现文件拷贝 /* Func ... -
linux操作系统的DNS客户端配置
2012-09-16 16:52 11281基于linux操作系统的DNS客户端配置: Linux ... -
/etc/hosts配置文件解析
2012-06-20 14:46 2483/etc/hosts配置文件解析 这个文件可以配置主机ip及 ... -
移殖net-snmp和应用net-snmp开发详解 -转
2012-06-08 17:46 3493移殖net-snmp和应用net-snmp开发详解 @ ... -
strtok 和strtok_r 的使用
2012-06-01 17:13 106111. strtok介绍众所周知,strtok可以根据用户所提供 ... -
关于LINUX C中函数strtok使用要点
2012-06-01 15:45 2201strtok函数的使用是一个老生常谈的问题了。该函数的作用很大 ... -
基于SNMP网络管理系统的设计与实现
2012-05-25 15:54 820原文链接:http://www.docin.com/p-265 ...
相关推荐
本工程用于研究Java Web文件下载 本工程编码方式:UTF-8 说明:本工程下载功能解决了使用IE11下载文件时所出现的乱码问题
TOMCAT在默认情况下下载.rar的文件是把文件当作text打开,以至于IE打开RAR文件为乱码,如果遇到这种情况时不必认为是浏览器的问题,大多数浏览器应该不会死皮赖脸地把二进制文件当作文本打开,一般都是服务器给什么...
web乱码解决web乱码解决web乱码解决web乱码解决web乱码解决
这是一个WebService接口的多线程文件下载,要的拿去
WebServer项目配置文件,自己编写的WebServer服务器的一些配置文件
C++Http上传文件到web服务器,解决中文参数乱码问题,微软提供的Chttpconnect 类在请求http头参数是中文时出现乱码
解决web项目中出现的乱码问题,很方便,只要一个java文件,同时在web.xml文件中配置该java文件就OK了 ,很方便的
最近发现乱码问题很烦,找了许多资料,自己总结了一些东西,主要是web页面的乱码,请大家指正
本机webserver服务器..
一个简易的WebServer,能够在IIS支持下实现网页的简单访问,适合初学者!
webServer,自己开发的服务器配置文件,用于一些基本的配置
easyui webserver 实现文件上传下载
对于C/S结构程式中自动更新程式是不可缺少部分,但是通过网上查找很难找到相关文档,具体项目实际情况,写了一个C# WinFrom与WebServer自动下载程序 1. winfrom自动与webserver版本检查获得更新路径 2. 获取更新的...
解决js运行得出的结果乱码的问题。(只需要发布web项目前将js文件转化一下即可。)
webserver
解决Mysql数据库在web开发中乱码问题
配置web-xml解决中文乱码问题.pdf
Esp32_FileMgr文件管理器, Smartconfig配网, SD卡file web server 网页管理SD卡文件,可下载,删除,编辑,重命名文件 Esp32cam直接使用。 支持MMC类型SD卡。
web项目中中文乱码问题总结,几解决方法。
android简单网页服务器,可作为android上面的webserver