我正在使用javascript库DropZone.js但是上传多个文件在某种程度上无法与ASP.Net MVC一起使用。
有效的方法是我设置Dropzone选项" autoProcessQueue:true"和MVC Controller参数名称" inputFiles"可以看到输入文件成功上传到服务器。但是,这意味着图像的上传会自动发生,用户无法单击表单提交按钮。 (我认为这就是为什么他们称之为DROPZone - 自动上传)
无论如何,我想让用户在上传之前点击提交按钮,所以我设置选项" autoProcessQueue:false",但在表单上提交参数名称" inputFiles"在Controller总是返回null。
<form action="/home" method="post" enctype="multipart/form-data" class="dropzone dz-clickable form-horizontal form-bordered" id="dropzoneForm">
<div class="form-group form-actions">
<div class="col-md-9 col-md-offset-4">
<button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-floppy-o"></i> Upload</button>
</div>
</div>
</form>
<script>
$(function () {
Dropzone.options.dropzoneForm = {
paramName: "inputFiles", // The name that will be used to transfer the file
autoProcessQueue: true,
uploadMultiple: false,
parallelUploads: 100,
accept: function (file, done) {
done();
}
};
});
</script>
[HttpPost]
public ActionResult Index(IEnumerable<HttpPostedFileBase> inputFiles)
{
string fName = "";
foreach (HttpPostedFileBase fileName in inputFiles)
{
HttpPostedFileBase file = fileName;
//Save file content goes here
fName = file.FileName;
if (file != null && file.ContentLength > 0)
{
var originalDirectory = new DirectoryInfo(string.Format("{0}Images\\WallImages", Server.MapPath(@"\")));
string pathString = System.IO.Path.Combine(originalDirectory.ToString(), "imagepath");
var fileName1 = Path.GetFileName(file.FileName);
bool isExists = System.IO.Directory.Exists(pathString);
if (!isExists)
System.IO.Directory.CreateDirectory(pathString);
var path = string.Format("{0}\\{1}", pathString, file.FileName);
file.SaveAs(path);
}
}
return View();
}
有人试过使用DropZone.js吗?
答案 0 :(得分:1)
您可以使用以下命令代替在操作中使用参数:
[HttpPost]
public ActionResult Index()
{
string fName = "";
foreach (var fileName in Request.Files.AllKeys)
{
var file = Request.Files[fileName];
//Save file content goes here
fName = file.FileName;
if (file != null && file.ContentLength > 0)
{
var originalDirectory = new DirectoryInfo(string.Format("{0}Images\\WallImages", Server.MapPath(@"\")));
string pathString = System.IO.Path.Combine(originalDirectory.ToString(), "imagepath");
var fileName1 = Path.GetFileName(file.FileName);
bool isExists = System.IO.Directory.Exists(pathString);
if (!isExists)
System.IO.Directory.CreateDirectory(pathString);
var path = string.Format("{0}\\{1}", pathString, file.FileName);
file.SaveAs(path);
}
}
return View();
}
依此类推......不确定它是否有效..不能尝试,但这个想法很有用
Request.Files
希望这有帮助!
答案 1 :(得分:0)
Paul Sanchez&#39;解决方案指出它,永远不会工作!! 根据Dropzone.js文件,它说:
&#34; 如果将autoProcessQueue设置为false,则永远不会隐式调用.processQueue()。这意味着当您想要上传当前排队的所有文件时,您必须自己调用它。 &#34;
在您的情况下,因为在使用&#34; autoProcessQueue:false&#34;禁用自动进程后,您从未在客户端调用.processQueue(),dropzone.js永远不会处理文件,因此inputFiles参数将是空。
我描述了如何阻止自动进程队列,并随时在表单上提交以下帖子: