我想编写一个Web应用程序,它有两个按钮,直接从浏览器中允许我打开两个简单的文本文件(使用文件打开对话框或类似的东西),然后继续读取内容那些文件并将它们存储在两个字符串中。这里的关键点是用于从中读取的确切文件在运行时是未知的,因此用户可以选择文件。
目标是能够稍后比较这两个字符串,但那部分我已经知道该怎么做了。我的问题是这样 - 甚至可以在Web应用程序内部执行此操作(即调用“文件打开”对话框以允许用户选择要读取的文件),或者安全限制或某些其他与Web应用程序相关的约束会阻止它从完成?
如果可能,我会很感激一些示例代码,用于描述如何打开文件以及如何将所选文件的内容读入字符串。 Othwerwise,我想知道它是否不可能,我应该考虑做一个桌面应用程序或尝试完全不同的方式。
谢谢!
答案 0 :(得分:6)
这是可能的,但您最终必须将两个文本文件上传到服务器并将文件读取到服务器端的字符串中。
您需要做的就是向页面添加两个单独的FileUpload
控件以及一个将文件发布到服务器的按钮。
如果您不想刷新页面,可以使用ASP.NET AJAX Toolkit中的AsyncFileUpload
控件通过AJAX进行比较。
<强>更新强>
读取文件的内容应该相对容易(只要它们是纯文本):
var reader = new StreamReader(fileUploadControl.PostedFile.InputStream);
var contents = reader.ReadToEnd();
答案 1 :(得分:2)
一种方法是使用ASP.NET AJAX AsyncFileUpload控件。
http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx
答案 2 :(得分:2)
为了从服务器端代码(C#代码)访问文件,您需要用户上传它们。执行此操作的标准方法(并且出于安全原因,您应该依赖的唯一方法)是使用文件输入元素。在ASP.NET中,您可以使用FileUpload控件。
您实际上会向用户提供其中两个控件,他们可以使用这两个控件上传这两个文件。然后你就可以在服务器上阅读它们的内容,保存它们(如文件,数据库,只在Session中临时使用等)并对数据执行逻辑。然后构建您的输出(比较部分,您已经说过),以便在页面刷新时显示。
请注意,如果用户尝试上传非文本文件,非常大的文件等,该怎么办?
答案 3 :(得分:0)
JS不可能单独使用。您必须构建文件上载(并存储会话信息)或使用Silverlight和Javascript-Bridge到您的Web应用程序。
以下是Silverlight中FileOpenDialog的示例:http://www.silverlightexamples.net/post/Open-File-Dialog-in-Silverlight.aspx
以下是通过C#/ Webforms http://support.microsoft.com/kb/323246
上传文件的例子