长文件名和中文文件名的文件为什么不能下载---等三个问题(300分谢诸大侠)

qinamao 2003-11-08 02:33:00
关于文件下载,我有两个问题:
1、上传文件(含路径文件全名变量:upfile)时,我想将upfile.ContentType存入sql数据库,但是好象编码问题,如upfile.ContentType="application/msword"
其中有"/",如何解决这个问题?

2、文件下载时,对于中文和长文件名的文件,则提示无法找到路径及打开页面。

3、另有如70M左右的文件上传没法成功。我已经在web.config中加入了:
<httpRuntime
executionTimeout="900"
maxRequestLength="819200"
useFullyQualifiedRedirectUrl="false"
/>


附:我的下载代码为:
strFileName=文件存放的物理路径的带扩展名的文件名(经Server.MapPath()转换过的)

FileStream fs = new FileStream(strFileName, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Label2.Text=strFileName;
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "application/octet-stream";
strFileName = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(strFileName));
Label1.Text=strFileName;

Response.AppendHeader("Content-Disposition", "attachment; filename="+strFileName);
Response.BinaryWrite(bytes);
Response.End();
...全文
172 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
comy 2003-11-10
  • 打赏
  • 举报
回复
中文文件名长了之后就是不行,我试了很多方法,还没有发现好的解决办法。
关注!!!!!!!
snla 2003-11-10
  • 打赏
  • 举报
回复
用中文名要编码
qinamao 2003-11-10
  • 打赏
  • 举报
回复
楼上的我试过了,还是老样子!
我还必须使用中文文件名和长文件名,我是将上传的文件既能被ftp用户直观的看到和下载,又要能被web用户从页面上直接下载,有什么办法解决呢?
hiaming 2003-11-10
  • 打赏
  • 举报
回复
http://202.96.112.25/cixi_Gov/news/info_list103102.aspx?s_TypeID=103102
看看我的这个
能正常处理的。

Q:1、上传文件(含路径文件全名变量:upfile)时,我想将upfile.ContentType存入sql数据库,但是好象编码问题,如upfile.ContentType="application/msword"
其中有"/",如何解决这个问题?
A:我用过,能正常加入。我建议你建一个表,存入常用扩展名对应的ContentType,保存时只存doc就行了,很方便.


Q:2、文件下载时,对于中文和长文件名的文件,则提示无法找到路径及打开页面。
你可以将文将下载的链接做点改动,如
string fileName="中文和长文件名的文件";
Response.Write("<a href="+fileName+">下载</a>");
//*****************改为下面的*************************
string fileName="中文和长文件名的文件";
Response.Write("<a href="+Server.UrlEncode(fileName)+">下载</a>");

Q:3、另有如70M左右的文件上传没法成功。我已经在web.config中加入了:
<httpRuntime
executionTimeout="900"
maxRequestLength="819200"
useFullyQualifiedRedirectUrl="false"
/>

A:我也试过,改了这里就可以了.但是,我也在一个客户的服务器上试过就不行,总是出超时,
经检查,他的服务器上有很多病毒,而且所处的网络也有冲击波病毒。可能与这些有关,
没经证实



gOODiDEA 2003-11-09
  • 打赏
  • 举报
回复
参考:

System.IO.FileStream fs = System.IO.File.OpenRead( _FilePath );
byte[] FileData = new byte[ fs.Length ];
fs.Read( FileData, 0, ( int ) fs.Length );
Response.Clear();
Response.AddHeader( "Content-Type", "application/zip" );
string FileName = System.Web.HttpUtility.UrlEncode( System.Text.Encoding.UTF8.GetBytes( _FileName ) );
Response.AddHeader("Content-Disposition", "inline;filename="+ System.Convert.ToChar(34) + FileName + System.Convert.ToChar(34) );
Response.AddHeader("Content-Length", fs.Length.ToString() );
Response.BinaryWrite( FileData );
fs.Close();
//System.IO.File.Delete( _FilePath );
Kanderliu 2003-11-08
  • 打赏
  • 举报
回复
关于文件下载,我有两个问题:
1、上传文件(含路径文件全名变量:upfile)时,我想将upfile.ContentType存入sql数据库,但是好象编码问题,如upfile.ContentType="application/msword"
其中有"/",如何解决这个问

>>>>>>>>>>>>你可以用一个变通的办法,就是只存msword;

2、文件下载时,对于中文和长文件名的文件,则提示无法找到路径及打开页面。

>>>>>>>>>>>对于中文问题,编码就可以解决的.(通过UTF-8),至于文件名称过长,下载是没有问题,只不过,名称会变成***.ASPX,但是打开那个文件,里面的内容是正确的.可以通过程序中,控制文件名称长度,应该可以解决.

3、另有如70M左右的文件上传没法成功。我已经在web.config中加入了.

>>>>>>>>>>这个问题,我也在探索,我提了3个关于文件下载的问题都没有解决!
http://expert.csdn.net/Expert/topic/2405/2405474.xml?temp=1.787966E-02
http://expert.csdn.net/Expert/topic/2397/2397957.xml?temp=.8276026
http://expert.csdn.net/Expert/topic/2410/2410608.xml?temp=.4750025
jasper_liu 2003-11-08
  • 打赏
  • 举报
回复
文件名过长会导致无法下载。

我曾经碰到过,就在程序里把文件名限制到了35个字节。
liuyd 2003-11-08
  • 打赏
  • 举报
回复
你的文件格式是否是GB2312

问题二:你的浏览器是否是以UTF-8发送URL(Internet选项-〉高级—〉设置中的最后一个选项)。
noahart 2003-11-08
  • 打赏
  • 举报
回复
问题一,我做过,ContentType都存到数据库中,没有遇到你的问题。“//”
问题二,好象和编码有关,支持中文不大好,我的现在上传是都用数字或英文组成的文件名存在服务器上,文件的整个中文名都存在相关的表里。下载的时候通过表里的文件路径下载。
问题三,能上传到70M就已经不错了!我也无奈中。。。
qinamao 2003-11-08
  • 打赏
  • 举报
回复
字段长度足够长!
KK4 2003-11-08
  • 打赏
  • 举报
回复
你的文件名在數據庫中的字長長度是否不夠長!!
yjmfdm 2003-11-08
  • 打赏
  • 举报
回复
不会吧。我的好几M的东西,是没有问题的。
qinamao 2003-11-08
  • 打赏
  • 举报
回复
如何解决呢?不是正常不正常的问题呀。
我的实际文件是另外上传到服务器的某个目录内!数据库内的文件名完好!
dongbeiren 2003-11-08
  • 打赏
  • 举报
回复
看看你的数据库中的字段长度是否够长,是不是文件名被截断了
comy 2003-11-08
  • 打赏
  • 举报
回复
2、3问题实属正常
Embarcadero.Delphi.10.2.2.v25.0.29039.2004.Lite.v14.3完整版,含示例、帮助、IOS、安卓支持、Net框架,共3G+。是最新的哦! 破解者说明如下: Embarcadero.Delphi.10.2.2.v25.0.29039.2004.Lite.v14.3 -------------------------------------------------------------------------------- 基本信息: 作者:lsuper 联系方式:... -------------------------------------------------------------------------------- 版本说明: 由于 XE5 时代 Delphi 安装体积急剧膨胀(完整安装接近 10G,程序文件、安装缓存超过 20G+),按照过去的方式打包,XE5 的 lite 体积 1.xG,接近 PE image 理论极限,而且当前 XE5 支持 x86、x64、osx、ios、android、等诸多平台功能,不好按照网友的口味进行裁剪(win32only、winonly、...) 经多方案权衡对比,决定 v8.x 开始,只使用 inno 对 Delphi 的主体功能进行封装(完整的 x86+其他支撑组件、注册表等),其他平台、功能的安装文件(x64、osx、ios、android)通过 7z 外挂的方式支持:安装时只需保证 lite exe 旁边有相关的 7z 文件文件不能变),在安装过程中即可选择、安装相应的功能(这意味着,如果只一个 exe、装出来就是 win32only,多一个 Ext.X64.7z,安装可选 x64 的支持,其他类推) 当前分为以下 12 个包: 包名称 文件大小 作用 Ext.3th.7z 91,226,756 网友收集的一些第三方扩展 Ext.Addons.7z 100,567,057 InterBase XE7、FastReport4 等 Ext.Android.7z 1,640,823,804 Android 编译环境 Ext.Help.7z 299,342,286 帮助文档 Ext.Hotfix.7z 000,000,000 网友收集的一些官方补丁 Ext.IOS.7z 3,737,156,232 IOS 编译环境 Ext.Linux.7z 1,180,105,999 Linux 编译环境 Ext.OSX.7z 846,515,926 OSX 编译环境 Ext.Samples.7z 599,352,431 范例,其实直接用 svn 的也行 Ext.SDK.7z 1,576,071,523 Android SDK/NDK 编译环境,当前包含 v23 的编译工具、虚机映像等 Ext.Support.7z 246,586,892 EMSServer、Image、LivePreview、PAServer 等支持组件 Ext.X64.7z 1,568,283,495 64 位编译环境 此外,安装程序支持: 1、保留一个第三方扩展的组件:Ext.3th.7z,当前集成 EDN 收集的扩展、增强文件,所有 7z 都会解压到 {app} 下 2、自动检测 Ext.SDK.7z 中的 SDK、NDK 版本进行设置,支持最新的 android-ndk-r9c-windows-x86+android-sdk_r24.3.3-windows 3、自动检测旁边的 jdk-7/8u*-windows-*.exe 进行安装,支持最新的 jdk-8u102-windows-i586 4、自动检测旁边的 NetFx20SP2_x86/NetFx20SP2_x64 进行安装 -------------------------------------------------------------------------------- 发布历史: 2017.12.20 - v14.3 1、根据 25.0.29039.2004 原版制作 2、集成 aldian、elseif、unis、x-force、cjack 等大虾的特别补丁 3、集成 Andreas Hausladen 的 IDE Fix Pack v6.1.2 2017.12.14 - v14.2 1、根据 25.0.28979.1978 原版制作 2、集成 elseif、unis、x-force、cjack 等大虾的特别补丁 2017.08.11 - v14.1 1、根据 25.0.27659.1188 原版制作 2、集成 elseif、unis、x-force、cjack 等大虾的特别补丁 2017.03.26 - v14.0 1、根据 25.0.26309.314 原版制作 2、集成 elseif、unis、x-force、cjack 等大虾的特别补丁 -------------------------------------------------------------------------------- 发布说明: 相对原始版本,这个 Lite 精简且只精简了原 RTM 的以下支持程序、第三方工具内容: 1、当前 Ext.Hotfix.7z 集成 30521_rad_studio_10.1_berlin_firemonkey_accessibility_pack、30530_april_2016_rad_studio_10.1_berlin_hotfix_for_datasnap、30531_april_2016_rad_studio_10.1_berlin_hotfix_for_samsung_galaxy 2、当前 Ext.3th.7z 集成 30491_firemonkey_premium_styles_pack_for_rad_studio_10.1_berlin、30492_vcl_premium_styles_pack_for_rad_studio_10.1_berlin 3、Samples 例子,可以通过 svn 获取:http://svn.code.sf.net/p/radstudiodemos/code/branches/RADStudio_Berlin/ 4、InterBase XE7、FastReport4 等,因为这些专版或者只有 dcu 没有完整源码,或者是原版功能精简版,推荐直接用原版吧 5、AQtimeRS.exe、CodeSite Express、CollabNetSubversion-client-1.7.5-1-Win32.exe、DevJET_DI_Setup_Express.exe、FBSE700.exe、RaveReportsSetup_Win.exe,当前官方 RTM 版本就是没有这些安装包的 其他: 1、PSDK 在当前官方帮助文档中已经没有了 2、XE7 开始,BDE 彻底消失了,需要独立的安装程序,只能通过官方注册用户下载 3、原版依赖 300多兆的 .NET Framework 3.5 sp1,我把它依赖的文件提取出来整合到安装程序中了,所以还是与以往 lite 一样,仅依赖 .NET Framework 2.0。 4、原版 Bds.exe 和 LicenseManager.exe 会访问网络,为避免不必要的流量,强烈建议直接 windows 防火墙屏蔽 其他的源码、支持库等都是绝对完整的。 -------------------------------------------------------------------------------- 已知问题: 关于 XP 下启动报错问题 Q1:说:bds.exe - 无法找到入口,无法定位程序输入点 InterlockedCompareExchange64 于动态链接库 KERNEL32.DLL 上? A1:没法子,原版如此,这个 API 需要 Vista 或者 Windows Server 2003 的支持,说明 Seattle 开始 EMB 要抛弃 XP 了,其实只是 ios 编译相关的 dll 需要这个,如 dcciosxxx,甚至 mongoc 也需要,如果不需要 ios 编译,可以无视绕过,点击确定即可 Q2:启动报 External exception C06D007F 的错误?这是 Castalia 的问题,Seattle IDE 直接集成了 Castalia 的代码,XE8 还可以通过注册表关闭 Castalia,Seattle 不行了 A2:后来 Unis 大侠在补丁中做了修补:Under XP simulate missing InterlockedCompareExchange64 and add stub functions for missing: AddClipboardFormatListener, RemoveClipboardFormatListener (this why (ex)castalia crash). Q3:经测试,在 XP SP3 之前的版本,依旧有问题:无法定位程序输入点 GetLogicalProcessorInformation 于动态链接库 KERNEL32.dll 上。 Q3:只能期待 Unis 大侠再次出手? 其他问题: Q4:怎么 Android SDK 还需要更新、下载? A4:原版如此;基于国情,直接集成了一个“够用的”(编译工具、虚机映像,但不包括文档、例子);也可以使用 swish 提供的 Android SDK 23.3.4:http://blog.qdac.cc/?p=2837;或者自己想办法红杏吧 ~ Qn:... An:... -------------------------------------------------------------------------------- 特别说明: 这个版本的来源于官方 Beta/RTM 正式试用版,版权归 Embarcadero 所有,请在下载后 24 小时内删除。 重新打包纯粹个人兴趣所致,希望能方便网友测试、交流。作为 Delphi 多年的 Fans,我们都希望 Delphi 能做得更好! 如果您觉得 Delphi 不错,请购买正版,更好的支持 Embarcadero 的发展! -------------------------------------------------------------------------------- 特别感谢: 1、elseif、crackerjack、dr、freecat、gateway、huayan889、kerlingen、sinner、unis、yuto 等大侠的特别补丁,感谢诸位我知道的不知道的的大虾们的辛勤劳动! 2、chineseswish、iny、nevergrief、onechen、snakejiao、star5、swish、tintin1943、ti9er、wang_80919、wuxiangyang 等等我知道的不知道的的网友们的热情测试! 3、andreas hausladen 等大虾们的无私贡献! -------------------------------------------------------------------------------- FAQ: 1、现在 Embarcadero 的安装程序已经很快了,为啥还要 Lite/Repack? 相对 D2006/2007 的安装确实进步了不少。不过依然存在安装时间,安装完遗留大量垃圾文件、卸载可能遗留垃圾等问题。这个 Lite 或者说是 Repack,就是为了方便 Delphier 们能方便的尝试 Delphi 的新功能,同时对系统的影响降到最小。至于用 Lite/Repack 还是原版,见人见智啦。 2、这个版本的来源? 这个版本的来源于官方 Beta/RTM 正式试用版,版权归 Embarcadero 所有,请在下载后 24 小时内删除。重新打包纯粹个人兴趣所致,希望能方便网友测试、交流。作为 Delphi 多年的 Fans,我们都希望 Delphi 能做得更好!如果您觉得 Delphi 不错,请购买正版,更好的支持 Embarcadero 的发展! 3、这个 lite 版完整么? 说是 lite 版,其实就是原版 Delphi 部分的 Repack,所有 Delphi 的功能都是完整的。我所做的就是在一个绝对干净的 VMWware XP 中安装官方的版本,除了只安装 Delphi,不包括 Rave 其他一切默认。安装出来的 Disk 文件与原始标准的对比,提取所有安装的文件、注册表啥的变化,然后用 Inno 重新封装。所以这个其实不是 lite 而是 repack。 4、可否增加某某某功能? 那多交流啊 ... 5、出现 xxx 问题啦 欢迎到盒子、B4A、SMTH 等论坛上提出您的反馈 .o(∩_∩)o..
转自看雪的CCDeath 【文章标题】: WinMount虚拟磁盘深入研究(-)之filedisk源代码详细分析 【下载地址】: 自己搜索下载 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 【详细过程】 我的驱动入门三终结版,还再学习中。由于个人也有些事情要处理,研究起刘涛涛WinMount的虚拟 磁盘,而且这方面的书籍,貌似乎没见过,只有傻傻的几K代码存在,没注释什么的,整体框架也没说。 虚拟光驱用实现文件来模拟磁盘的原理,是文件系统驱动程序。 把filedisk驱动安装,查看install.txt文件。 1.Copy the driver (filedisk.sys) to %systemroot%\system32\drivers\. 2.Import filedisk.reg to the Registry. 3.Reboot. 4.Use the program filedisk.exe to mount/umount files, for an example of use see the file example.txt. 可以不用重起机子的方法,找一个动载加载驱动工具:DriverMonitor不错了。然后在“开始菜单”-> "运行"输入 "net start filedisk" 出现:“ 请求的服务已经启动”。这个必须得成功才行哦。 接下来注意点。cmd后 出现这个目录 C:\Documents and Settings \Administrator>,在接下来敲入 filedisk /mount 0 c:\temp\filedisk.img 8M f: C:\Documents and Settings \Administrator>filedisk /mount 0 c:\temp\filedisk.img 8M r: 回车一下。 出现"FileDisk:系统找不到指定路径" 。原因就出在这 "c:\temp\filedisk.img" 中的C:\temp要这个目录才行。至于 filedisk.img不是必须,会自动创建。 如果有出现"FileDisk:函数不正确" 中的“filedisk /mount 0 ”中"0"代号已经被使用。可以改为"1". 查看一下,结果就出现一个还未格式化 8M R磁盘,查看C:\temp下生成一个filedisk.img也8M。想卸载 掉"filedisk /umount r:". 还可以创建很大的虚拟磁盘,你把"8M"改换其他的就是了。 以上如果都没出现结果,基本上就没兴趣继续研究下去了,我看到了很多人初学filedisk都遇到以上这 些问题(包括我在内) ,把我折腾了半天。 先来分析驱动层代码,后来分析应用层代码。更详细的请看附件里的源代码。我对代码工程方式重新布 局,用起来更方便。 ===================================//先来分析驱动层代码 1.对filedisk.h进行分析 #define FILE_DEVICE_FILE_DISK 0x8000//用户定义范围0x8000~ #define IOCTL_FILE_DISK_OPEN_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_FILE_DISK_CLOSE_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define IOCTL_FILE_DISK_QUERY_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS) typedef struct _OPEN_FILE_INFORMATION { LARGE_INTEGER FileSize;//文件大小 BOOLEAN ReadOnly;//只读属性 USHORT Fil

62,252

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧