通过'Uploadify'Jquery插件跟踪成功上传的文件名

时间:2011-09-23 13:56:43

标签: jquery asp.net-mvc-3 jquery-plugins

我在我的MVC 3.0应用程序中使用'Uploadify'Jquery插件来上传多个文件。 它工作正常,但显示上传时失败的文件列表。

如何跟踪成功上传的文件名?

我的脚本如下:

<link href="@Href("~/Content/uploadify.css")" rel="stylesheet" />
    <script src="@Href("~/Scripts/jquery-1.4.1.js")" type="text/javascript"></script>
    <script src="@Href("~/Scripts/jquery.uploadify.js")" type="text/javascript"></script>

<script type="text/javascript">
    $(window).load(
    function () {
        $("#fileuploader").fileUpload({
            'uploader': '/Scripts/uploader.swf',
            'cancelImg': '/Images/cancel.png',
            'buttonText': 'Select Image',
            'script': 'Home/Upload',
            'folder': '/uploads',
            'fileDesc': 'Image & XML Files',
            'fileExt': '*.jpg;*.jpeg;*.gif;*.png;*.xml',
            'multi': true,
            'auto': true
        });
    }
);
    </script>

我的HTML代码:

<div id="fileuploader"></div>
<div>Upload Status</div>
Successful Files : <div> @TempData["SuccessfulFileList"]</div>
Failed Files :<div> @TempData["FailedFileList"]</div>

Controller代码如下:

        private static List<string> _successfulFileList = new List<string>();
        private static List<string> _failedFileList = new List<string>();

        public string Upload(HttpPostedFileBase fileData)
        {
            try
            {
                var fileName = this.Server.MapPath("~/uploads/" + System.IO.Path.GetFileName(fileData.FileName));
                fileData.SaveAs(fileName);
                _successfulFileList.Add(fileName);
            }
            catch
            {
                var failedFileName = fileData.FileName;
                _failedFileList.Add(failedFileName);
            }

            TempData["SuccessfulFileList"] = _successfulFileList;
            TempData["FailedFileList"] = _failedFileList;
            return "Some Files Get uploaded";
        }

2 个答案:

答案 0 :(得分:0)

您正在使用Flash组件上传文件(Uploadify)。 Flash组件不发送cookie。会话由cookie跟踪。 TempData使用Session。结论=&gt;您不能将TempData与Flash客户端一起使用。有some ugly workarounds

据说在控制器中使用静态列表来存储上传的文件是非常危险的,因为List<T>对象不是线程安全的,如果你有2个用户并行上传文件,你的应用程序可能会崩溃。

作为替代方案,您可以将上传文件的列表存储到数据存储区(数据库或其他内容),然后从那里获取,而不是依赖会话。

答案 1 :(得分:0)

我在这里找到了一个非常具有描述性的解释:Link

参考:http://blog.bobcravens.com/2010/02/upload-files-with-progress-using-uploadify/

相关问题