我正在使用ASP.NET 3.5进行编程。
我需要处理一个必须由用户上传的文件。该文件采用特定格式。基本上,我需要获取文件中的信息,解析它,并将其插入到SQL数据库中。我这样做没有问题,但我想知道如何从网站上做到这一点。
我想我想创建一个用户可以访问的共享,让用户将文件上传到共享,然后在上传时,将记录保存到具有完整UNC路径的DB中。在站点中,使用该UNC路径处理文件,然后将文件移动到某个“已处理”文件夹。
有人做过这样的事吗?是否有任何“标准”的做法与此类似?
感谢。
答案 0 :(得分:2)
我不知道这是否可以帮助您,但您可以使用命名空间FileUpload
中的System.Web.UI.WebControls
类。
您可以查看MSDN: here
答案 1 :(得分:0)
1)使用上传INPUT创建一个ASPX页面。
2)让用户上传文件
3)获取ASP.NET上传文件并将二进制流写入文件,并将文件注册到数据库
4)完成请求但在此之前产生后台线程来处理文件
5)您需要对已注册但由于某种原因无法处理的文件进行单独的清理操作。
答案 2 :(得分:0)
最快的解决方案 - 如果您的文件处理将在脚本超时之前完成,并且您很乐意让用户在发生时等待:
将您网站上的虚拟目录映射到您的上传文件夹 - 在我们的网站上,我们/〜上传/我们所有的网络服务器上映射到我们DMZ文件服务器上的开放共享。
然后在您的页面代码隐藏
中使用类似的代码protected void ProcessFilesButton_Click(object sender, EventArgs e) {
string uploadRootPath = Server.MapPath("~/upload/");
foreach(var uploadedFile in Request.Files) {
// might want to use a GUID filename here instead
// to avoid risk of filename conflicts.
string bareFileName = Path.GetFileName(uploadedFile.FileName);
string fullFilePath = Path.Combine(uploadRootPath, bareFileName);
uploadedFile.SaveAs(fullFilePath);
myMagicFileProcessor.ProcessFile(fullFilePath);
}
MyLabel.Text = String.Format("{0} files processed", Request.Files.Count);
}
更复杂的解决方案将涉及产生后台线程(或单独的Windows服务或计划任务)来处理文件处理,然后返回“请等待...”页面,其中包含元刷新,这将每隔10秒钟重新绘制一次页面,然后在代码隐藏中查询队列中文件的状态,并在每个文件处理完成时报告它们。