我正在为我的MVC3项目使用uploadify
fileupload插件。
我正在尝试将上传文件用于控制器。
如何一起使用多文件上传和单个文件上传?
我知道将IEnumerable<HttpPostedFileBase> files
用于多个文件,HttpPostedFileBase files
用于单个文件上传。如何结合这些。
在我的项目中,用户可以选择多个文件或仅选择一个文件将其上传到控制器。
所以,如果我在我的控制器操作中使用IEnumerable<HttpPostedFileBase> files
,我将无法获取单个文件(文件为空),如果我使用HttpPostedFileBase files
它不显示任何内容,文件在此处始终为null
如何使用单个文件上传,我可以上传多个文件,但不能上传单个文件。
如何开展这项工作?
这是我的代码:
HTML
<body>
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div id="fileupload" style="display:none">
<div style="clear: none;">
File to Upload:
<input type="file" name="file_upload" id="file_upload" style="padding-left: 50px;"/><hr />
</div>
<p style="text-align: right;">
<input type="submit" id="selectimage" value="Ok" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"/>
<input type="submit" id="cancelimage" value="Cancel" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="cancelupload();" />
</p>
</div>
<input type="button" id="btnImg" />
<div id="filecontent">
Added Images:
</div>
}
</body>
<script>
$(function(){
$('#file_upload').uploadify({
'checkExisting': 'Content/uploadify/check-exists.php',
'swf': '/Content/uploadify/uploadify.swf',
'uploader': '/Home/Index',
'auto': false,
'buttonText': 'Browse',
'fileTypeExts': '*.jpg;*.jpeg;*.png;*.gif;*.zip',
'removeCompleted': false,
'onSelect': function (file) {
$("#selectimage").click(function () {
$("#file_upload-queue").appendTo("#filecontent");
});
}
});
});
</script>
控制器操作
public ActionResult Index(IEnumerable<HttpPostedFileBase> fileData)
{
foreach (var file in fileData)
{
if (file.ContentLength > 0)
{
string currpath = Server.MapPath("~/Images/");
currpath = Path.Combine(Server.MapPath("~/Images/Admin"), file.FileName);
file.SaveAs(currpath);
}
}
return View();
}
我应该更改控制器操作以使单个文件上传和多文件上传工作?
更新
IEnumerable<HttpPostedFileBase> fileData
和HttpPostedFileBase fileData
都没有工作
答案 0 :(得分:1)
对于要上载的每个文件,将多次调用控制器操作。但是您似乎隐藏了上传表单(您将其放在带有display:none
的div中)。此外,您永远不会使用Uploadify实际上传文件。您已设置auto: false
并且永远不会使用upload
方法触发文件上传。所以我猜你是以某种方式提交表单并期望在服务器端得到一些东西,但这不会发生这样的事情。
所以,让我们清理并简化:
<div>
<input type="file" name="file_upload" id="file_upload" />
</div>
<hr />
<div id="filecontent">
Added Images:
</div>
<input type="button" id="upload" value="Upload selected files to the server" />
<script type="text/javascript" src="@Url.Content("~/Content/Uploadify/jquery.uploadify-3.1.min.js")"></script>
<script type="text/javascript">
$('#file_upload').uploadify({
'swf': '@Url.Content("~/Content/uploadify/uploadify.swf")',
'uploader': '@Url.Action("index", "home")',
'auto': false,
'multu': true,
'buttonText': 'Browse',
'fileTypeExts': '*.jpg;*.jpeg;*.png;*.gif;*.zip',
'removeCompleted': false,
'onSelect': function (file) {
$("#selectimage").click(function () {
$("#file_upload-queue").appendTo("#filecontent");
});
}
});
$('#upload').click(function () {
$('#file_upload').uploadify('upload', '*');
return false;
});
</script>
您的控制器操作现在可以变为:
[HttpPost]
public ActionResult Index(HttpPostedFileBase fileData)
{
if (fileData != null && file.ContentLength > 0)
{
var currpath = Path.Combine(
Server.MapPath("~/Images/Admin"),
fileData.FileName
);
fileData.SaveAs(currpath);
}
return Json(new { success = true });
}
答案 1 :(得分:0)
尝试它插件:使用html5 + flash + silverlight根据:客户端浏览器。 http://des.delestesoft.com:8080/?go=2