长文件名和中文文件名的文件为什么不能下载---等三个问题(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();
...全文
152 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.276
转自看雪的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
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bea

62,071

社区成员

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

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

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

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