【问题标题】:MVC : Upload List of files and save in Folder(name-GUID) for individualMVC:上传文件列表并保存在文件夹(名称-GUID)中以供个人使用
【发布时间】:2013-12-04 11:18:07
【问题描述】:

我想从不同的用户上传多个文件并将它们全部保存在服务器上,每个用户都有单独的文件夹,其中包含他上传的文件列表。

要求:如果用户上传 5 个文件,所有 5 个文件都将存储在具有 GUID 文件夹名称的单个文件夹中。

我下面的代码为用户上传的每个文件创建一个新文件夹。 例如:如果用户上传了 5 个文件,则所有五个文件都将存储在具有 GUID 文件夹名称的五个不同文件夹中。

我的控制器上传方法如下图:

 ##Controller Code##

    public string Upload(HttpPostedFileBase fileData)
    {            var testfolder = this.Server.MapPath("~/uploads/");
             string newGuid = Guid.NewGuid().ToString();
             string pathToCreate = Path.Combine(testfolder, newGuid);
             if (!System.IO.Directory.Exists(pathToCreate))
             {
                 System.IO.Directory.CreateDirectory(System.IO.Path.Combine(testfolder, newGuid));
             }
             var fileName = pathToCreate + "//" + System.IO.Path.GetFileName(file.FileName);
             file.SaveAs(fileName);                              
             return "OK"; 
     }

##查看代码##

  @{
  Layout = "~/Views/Shared/_Layout.cshtml";
  }
   <link href="@Href("~/Content/uploadify.css")" rel="stylesheet" />
 <link href="@Href("~/Content/bootstrap.css")" rel="stylesheet" type="text/css" />
 <div class="row">
 <div style="width: 50%;">

        <input type="file" id="multipleFiles" style="width: 50%;" /><div style="width:     77%;
            float: right" id="progressbar">
        </div>
    </div>
    <div id="fileQueue"></div>
   </div>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"                          type="text/javascript"></script>
     <script src="@Href("~/Scripts/jquery-1.9.1.js")" type="text/javascript"></script>
      <script src="@Href("~/Scripts/bootstrap.js")" type="text/javascript"></script>

        <script src="@Href("~/Scripts/jquery.uploadify.js")" type="text/javascript">   </script>
        <script type="text/javascript">

         $(function () {
     $("#multipleFiles").uploadify({
        'swf': 'Scripts/uploadify.swf',
        'cancelImg': '/Images/trash.jpg',
        'buttonText': 'Add Documents',
        'uploader': 'Upload/Upload',
        'folder': '/uploads',
        'dataType': 'json',
        'fileDesc': 'Image Files',
        'fileExt': '', //'*.jpg;*.jpeg;*.gif;*.png',
        'multi': true,
        'removeCompleted': false,
        'auto': false,
        'height': '30px',
        'queueID': 'fileQueue'
           });
   });
</script>

【问题讨论】:

  • 该代码中没有提到用户。 (如何)您的用户登录? (如何)你存储用户属性?例如,您可以在会话中为每个用户保存 GUID。
  • @CodeCaster .. 在这里我从 cookie 中获取用户...如果不使用会话也无法完成,因为我想将文件列表存储在每个用户的带有 Guid 的特定文件夹中。任何帮助将不胜感激..:)
  • "Guid for each user" - 这就是为什么我建议将 GUID 存储在会话中,因为会话是每个用户...
  • @CodeCaster .... 抱歉,默认会话时间为 20 分钟。如果同一用户上传其他文件集,这些文件将保存在同一文件夹下。这里我的要求是将每组文件保存在不同的文件夹中,并且该文件夹对于每个上传提交操作应该是唯一的(包含多个文件)
  • 您的问题不在于文件夹或 GUID,而在于按用户存储属性。您必须生成一次 GUID,并根据您管理用户的方式将其与用户的配置文件一起存储。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor-2


【解决方案1】:

好的,鉴于你不能使用 Sessions,我建议如下:

在视图中生成 GUID 并将 url 作为您发布到的 url 的一部分:

警告:此代码不提供任何保证,我尚未对其进行测试,因此可能需要进行一些调整。请考虑它背后的想法更重要。 :)

查看代码:

 $(function () {

     var guid= '@(Guid.NewGuid().ToString())'; //generated on render time

     $("#multipleFiles").uploadify({
        'swf': 'Scripts/uploadify.swf',
        'cancelImg': '/Images/trash.jpg',
        'buttonText': 'Add Documents',
        'uploader': 'Upload/Upload?guid='+guid, //modified to include guid
        'folder': '/uploads',
        'dataType': 'json',
        'fileDesc': 'Image Files',
        'fileExt': '', //'*.jpg;*.jpeg;*.gif;*.png',
        'multi': true,
        'removeCompleted': false,
        'auto': false,
        'height': '30px',
        'queueID': 'fileQueue'
     });
});

控制器代码:

public string Upload(HttpPostedFileBase fileData, Guid guid)  {
    //now you can use the guid to save the files
}

【讨论】:

  • 根据您的建议,现在 GUID 是用户的常量。如果同一用户上传其他文件集,这些文件将保存在同一文件夹下。这里我的要求是将每组文件保存在不同的文件夹中,并且该文件夹对于每个上传提交操作应该是唯一的(包含多个文件)
  • 好吧,我的错,没有正确理解你。我要编辑并再试一次。
  • 那里,第二次尝试。
  • 哇..令人兴奋..您的解决方案在运行中没有任何问题..非常感谢..:) :)
  • 当同一用户在上传两个文件之间刷新页面时,GUID仍然会不同。
猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2022-08-21
  • 2015-01-12
  • 2012-12-31
  • 2021-08-26
  • 1970-01-01
相关资源
最近更新 更多