如何有效地在ASP.NET中处理客户端的文件? 如果ASP.NET能随便打开客户端上的文件的话,那它的安全性就太差了:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不行,读取网络中共享的文件出这个错:登录失败: 未知的用户名或错误密码另外,这样也很不方便,客户端使用ASP.NET处理文件难道还要把待处理的文件共享才行吗? 可能我们的想法不一样:我的目标是把ASP.NET作为一个轻量的文件处理程序来用,客户端如同上载文件一样可以提供程序需要的文件,而不是SERVER端想打开哪个就打开哪个。打开文件是已经认可了的。引用文件是使用PostedFile指定的,如果连这个都不行,上载文件怎么做的? 我一直做的 ASP,现在刚开始学 ASP.NET,我用 ASP 来解释一下吧。假若文件上传表单如下:<form action="saveupfile.asp" method="post" enctype="multipart/form-data"><input type="file" name="f1"><br><input type="submit" value="确定"></form>在处理表单的页面 saveupfile.asp 中,只写这么一句:<% Response.BinaryWrite Request.BinaryRead(Request.TotalBytes) %>当提交表单后,你看处理结果的源文件,应该是如下:-----------------------------7d216424b0740Content-Disposition: form-data; name="f1"; filename="<上传文件路径及文件名>"Content-Type: <上传文件类型,如text/plain><上传文件内容>-----------------------------7d216424b0740--可以看出,上传文件时,是由客户端将文件发送至服务器端,再由服务器端处理,而不能由服务器指定一个客户端的文件来处理。所以,你的做法是行不通的。 我也知道依靠服务器访问客户端的文件困难重重,但我曾经试验成功过,这不是乱说,我的日志记录里面有直接打开客户端文件运行成功并且将处理结果保存到服务器端的记录。另外,ASP.NET里面,PostFile是可以直接Save的(很简单的一般上载方法),但除了直接Save外,InputStream等其它属性是怎么使用的?如果不能在Server端做某些操作,为和HttpPostedFile类会有这些直接操作的方法或属性? HttpPostedFile是对已经上传到服务器的文件的操作,是在服务器这一端。 如果是这样的话,那运行BinaryReader之前,客户端指定的文件就已经上载到了服务器了。我在客户端是用HtmlInput指定文件名称的。另外,刚才我又重新试验了我的代码,又有三次成功的记录!我发现似乎和aspnet_wp这个进程有关系。试验中分别使用了两台服务器作代码服务器,两台都安装了.Net Framework ,但其中一台是我的开发机(上安装VS.Net rc7)。结果:连接到没有安装VS.NET RC7的服务器在重新启动aspnet_wp后第一次运行成功,但连续后面的操作就失败了;客户端连接到安装了VS.NET RC7的服务器多次运行均成功而且,后一台的machine.config里面username是“machine”,而前一台却是“System”啊。有关系吗? 程序实际不复杂:客户端的aspx上有个HtmlInput控件,Type=File,用于指定待处理文件的名称,点击submit按钮或Webform的Button后,触发的事件处理程序中会去使用一个BinaryReader试图打开指定的文件,读完文件内容后这个文件实际上就不重要了。我以前的开发调试时,服务器和客户端都在一台机器上,略过了一些细节,基本功能通过后,搬到另外一台服务器上,客户端远程连接,麻烦就来了…………试验时实际上就是这么个客户端操作,其它没有。服务器当然是和客户端分开进行的,但感觉不稳定。刚才我发现原来第一台服务器又工作正常了,真*^&%$%^$#@%#@%…………另外,我可以确定在服务器上没有和客户端文件存放位置相同的文件或目录。 程序实际不复杂:客户端的aspx上有个HtmlInput控件,Type=File,用于指定待处理文件的名称,点击submit按钮或Webform的Button后,触发的事件处理程序中会去使用一个BinaryReader试图打开指定的文件,读完文件内容后这个文件实际上就不重要了。我以前的开发调试时,服务器和客户端都在一台机器上,略过了一些细节,基本功能通过后,搬到另外一台服务器上,客户端远程连接,麻烦就来了…………试验时实际上就是这么个客户端操作,其它没有。服务器当然是和客户端分开进行的,但感觉不稳定。刚才我发现原来第一台服务器又工作正常了,真*^&%$%^$#@%#@%…………另外,我可以确定在服务器上没有和客户端文件存放位置相同的文件或目录。 BinaryReader试图打开指定的文件你去打开哪个文件?在服务器那边只能得到你post上去的stream跟你原来的文件已经没有半点关系了难道根据PostedFile.FileName去读文件?那除非你在文件名里指定某机器的共享文件,或者本机的文件 信不信由你,根据PostedFile.FileName我的确读取成功过。 我想你应该用activex控件可能好一点.或者你将客户端的文件临时保存在服务器中大伙说得很清除了,客户端不能太没有安全感了. 在Content page 中 弹出对话框 ckfinder 设置问题 如果对TextBox.Text里内容进行验证 mschart tooltip的显示 简体网页在繁休系统下显示问题 asp.net 2.0 中水晶报表导出excel问题,急 我网站都是调用的静态方法,传到万网空间上后,SESSION总是失去,这是为什么 能不能用<a>标记实现onclick事件(用JavaScript实现)使当前页面关闭同时清空session,并且打开另外一个窗口? 各位大虾这是什么问题啊 asp.net如何向硬件發送命令和接收硬件回傳的信息 xml文件的读写问题 组件调用
登录失败: 未知的用户名或错误密码另外,这样也很不方便,客户端使用ASP.NET处理文件难道还要把待处理的文件共享才行吗?
我的目标是把ASP.NET作为一个轻量的文件处理程序来用,客户端如同上载文件一样可以提供程序需要的文件,而不是SERVER端想打开哪个就打开哪个。打开文件是已经认可了的。引用文件是使用PostedFile指定的,如果连这个都不行,上载文件怎么做的?
<form action="saveupfile.asp" method="post" enctype="multipart/form-data">
<input type="file" name="f1"><br>
<input type="submit" value="确定">
</form>在处理表单的页面 saveupfile.asp 中,只写这么一句:
<% Response.BinaryWrite Request.BinaryRead(Request.TotalBytes) %>当提交表单后,你看处理结果的源文件,应该是如下:
-----------------------------7d216424b0740
Content-Disposition: form-data; name="f1"; filename="<上传文件路径及文件名>"
Content-Type: <上传文件类型,如text/plain><上传文件内容>-----------------------------7d216424b0740--可以看出,上传文件时,是由客户端将文件发送至服务器端,再由服务器端处理,而不能由服务器指定一个客户端的文件来处理。所以,你的做法是行不通的。
我发现似乎和aspnet_wp这个进程有关系。
试验中分别使用了两台服务器作代码服务器,两台都安装了.Net Framework ,但其中一台是我的开发机(上安装VS.Net rc7)。结果:
连接到没有安装VS.NET RC7的服务器在重新启动aspnet_wp后第一次运行成功,但连续后面的操作就失败了;
客户端连接到安装了VS.NET RC7的服务器多次运行均成功而且,后一台的machine.config里面username是“machine”,而前一台却是“System”啊。有关系吗?
客户端的aspx上有个HtmlInput控件,Type=File,用于指定待处理文件的名称,点击submit按钮或Webform的Button后,触发的事件处理程序中会去使用一个BinaryReader试图打开指定的文件,读完文件内容后这个文件实际上就不重要了。我以前的开发调试时,服务器和客户端都在一台机器上,略过了一些细节,基本功能通过后,搬到另外一台服务器上,客户端远程连接,麻烦就来了…………试验时实际上就是这么个客户端操作,其它没有。服务器当然是和客户端分开进行的,但感觉不稳定。刚才我发现原来第一台服务器又工作正常了,真*^&%$%^$#@%#@%…………另外,我可以确定在服务器上没有和客户端文件存放位置相同的文件或目录。
客户端的aspx上有个HtmlInput控件,Type=File,用于指定待处理文件的名称,点击submit按钮或Webform的Button后,触发的事件处理程序中会去使用一个BinaryReader试图打开指定的文件,读完文件内容后这个文件实际上就不重要了。我以前的开发调试时,服务器和客户端都在一台机器上,略过了一些细节,基本功能通过后,搬到另外一台服务器上,客户端远程连接,麻烦就来了…………试验时实际上就是这么个客户端操作,其它没有。服务器当然是和客户端分开进行的,但感觉不稳定。刚才我发现原来第一台服务器又工作正常了,真*^&%$%^$#@%#@%…………另外,我可以确定在服务器上没有和客户端文件存放位置相同的文件或目录。
在服务器那边只能得到你post上去的stream
跟你原来的文件已经没有半点关系了难道根据PostedFile.FileName去读文件?
那除非你在文件名里指定某机器的共享文件,或者本机的文件
或者你将客户端的文件临时保存在服务器中
大伙说得很清除了,客户端不能太没有安全感了.