具有MVC
应用程序的Am,其中用户使用fileupload控件并将具有30 MB或更大大小的文件上载到sql db。
对MVC arch来说还很新。所以,很抱歉,我可能会问一些愚蠢的问题!
现在,客户说,最终用户在上传许多大文件时遇到了困难,因此,他想通过选择一个文件夹并提取所有这些大文件并将其插入sql db进行优化。
multi-file-upload-not-userfriendly
最终用户说,他们不想单击“上载浏览”,而是多次单击。相反,他们将选择一个文件夹-包含他们想要的所有文件-并单击一个上载按钮,该文件夹将被上载/插入到db中。 在上图中,需要上传4个文件。但在某些情况下,可能需要上传10个文件。在这种情况下,最终用户将不会对一次多文件上传感兴趣。这些文件的大小可能在10 kb到100 MB之间!
将多个也有大文件的文件上传到db的替代方法是什么? 经过一番思考,我打算:
1)压缩文件文件并将文件加载到服务器的共享位置,然后从那里,我的代码将逐个读取文件并插入db
但是,谁能确认这是正确的方法吗?我需要在服务器中创建一个共享驱动器-例如C:\sharedFolder
,然后我将提示用户浏览多个文件(例如file1.txt,file2.xlsx等,分别具有大约40 mb,50 MB ...),然后单击“上传”,我将复制文件并将其转储到服务器的共享文件夹位置。
我尝试过的事情: 我使用了fileupload控件。
我的ABCcontroller.cs文件中的当前代码:
[HttpPost]
public ActionResult UploadfilePost(HttpPostedFileBase file)
{
string _path;
try
{
if (file.ContentLength > 0)
{
string _FileName = Path.GetFileName(file.FileName);
_path = Path.Combine(Server.MapPath(@"~/App_Data"), _FileName);
file.SaveAs(_path);
var tempFileName = Path.GetTempFileName();
try
{
using (var streamReader = new StreamReader(_path))
using (var streamWriter = new StreamWriter(tempFileName))
{
// code to further manipulate
}
答案 0 :(得分:2)
您可以使用Request.Files作为HttpFileCollectionBase获得多个文件,并且通过迭代可以上传多个文件。
[HttpPost]
public ActionResult Index(HttpPostedFileBase FileUpload1)
{
if (FileUpload1.ContentLength > 0)
{
HttpFileCollectionBase files = Request.Files;
DataTable dt = new DataTable { Columns = { new DataColumn("Path") } };
for (int i = 0; i < files.Count; i++)
{
HttpPostedFileBase file = files[i];
string path = Server.MapPath("~") + "\\Images\\" + file.FileName;
dt.Rows.Add(file.FileName);
file.SaveAs(path);
}
ViewData.Model = dt.AsEnumerable();
}
return View();
}