【问题标题】:Multiple fileuploads with ASP.NET MVC使用 ASP.NET MVC 进行多个文件上传
【发布时间】:2011-01-25 19:33:35
【问题描述】:

嗨,

我从 2008 年开始由 Steve Sanders 实现了这个 plugin。在我的解决方案中,我有 3 个按钮用于 3 次上传,而且效果很好。但这不是一个完美的选择,问题是thera是否对我来说是一个更好的解决方案?

我需要的是:

  1. 能够上传多个文件
  2. 当触发控制操作时,应该可以使用文件
  3. 最终用户应该能够取消上传的文件(据我所知,Steves 插件无法做到这一点)
  4. 易于与 ASP.NET MVC 一起使用
  5. 如果对 Control Action 进行了发布并且返回了验证错误,则上传可能不会消失。

恳请建议

【问题讨论】:

    标签: asp.net jquery asp.net-mvc ajax file-upload


    【解决方案1】:

    使用Uploadify怎么样?我以前用过,效果很好。但请注意,它还需要一个 Flash 前端才能工作......

    看看this StackOverflow 问题 - 在那里你会找到更多关于如何将它与 ASP.NET MVC 一起使用的信息。

    【讨论】:

    • 这看起来很糟糕,但它会在不支持闪存的智能手机上运行吗?
    • 不,可能不会。不过,您应该已经在您的问题中添加了该要求...并且请记住,仅使用 javascript 的解决方案将非常 limited (这将是通过智能手机工作的唯一方法)。事实上,你应该做的是提供所有选项:flash 用于富客户端,javascript 仅用于智能手机/受限浏览器,以及用于禁用 javascript 的客户端的常规输入文件。这可以使用 javascript 和 <noscript> 标记来完成。
    【解决方案2】:

    Steve Sanders 的插件在后台使用 swfUpload,它可以支持您所需的一切。然而,他的插件似乎并没有公开 swfUpload 的所有功能,例如取消上传。

    我在支持多个文件、取消上传、验证而不取消其他上传等的网站上完全使用 swfUpload。

    这里有一个demo of swfUpload,您可以在其中取消上传

    【讨论】:

    • 谢谢,但这个例子只在上传期间提供取消,史蒂夫的插件已经支持了。是的,我知道插件可以更改以适合我的应用程序,但我对 Jquery 不那么感兴趣。你比较过 swfUpload 和 Uploadify 吗?重要的是最终结果将被尽可能多的客户使用。如果它也能在闪存不工作的智能手机上工作,那就太好了。
    【解决方案3】:

    另一个选项是 SlickUpload

    它不是免费的,但在我看来绝对值得。我最近在一个 MVC 项目中使用它并且对它非常满意。我用过的最好的上传插件 + 它带有各种验证助手。

    它也是完全可定制的。

    Download the trial 看看你自己:)

    【讨论】:

      【解决方案4】:

      使用纯 ASP.NET 是不可能的。

      你需要采取JQuery uploadify。 这是你能找到的最好的,相信我,我试了一整天。

      <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="MassUpload.aspx.vb" Inherits="Raumplaner_New.MassUpload" %>
      
      
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head id="Head1" runat="server">
          <title>Mass Upload</title>
      
      
          <link href="../upload/css/uploadify.css" rel="stylesheet" type="text/css" />
          <script type="text/javascript" src="../scripts/jquery-1.3.2.min.js"></script>
          <script type="text/javascript" src="../scripts/swfobject.js"></script>
          <script type="text/javascript" src="../scripts/jquery.uploadify.v2.1.0.min.js"></script> 
      
      <script type = "text/javascript">
      
          $(document).ready( function() 
          { 
              $("#<%=FileUpload1.ClientID%>").uploadify({     
              'uploader'       : '../upload/scripts/uploadify.swf',
              'script'         : '../cgi-bin/Upload.ashx',
              'cancelImg'      : '../upload/images/cancel.png',
              'folder'         : '../upload/temp',
              'buttonImg'      : '../upload/images/uploadbutton.png',
              'width'          : '97',
              'height'         : '22',
              'wmode'          : 'transparent',
              'displayData'    : 'speed', 
              'multi'          : true,
              'auto'           : true,
              'simUploadLimit' : 20,  
              'fileDesc'       : 'DWG und SWF - Dateien',
              'fileExt'        : '*.dwg;*.swf',
              'onSelect'       : function(event, queueID, fileObj){ EnableObject('FileUpload1');},
              'onCancel'       : function(event, queueID, fileObj, data){DisableObject('FileUpload1');},
              'onComplete'     : function(event,queueID,fileObj,response,data){alert(fileObj.name);}
              });
      
      
              $("#startUploadLink").click( function()
              {           
                  $('#<%=FileUpload1.ClientID%>').uploadifyUpload();
                  return false;
              });
      
              $("#clearQueueLink").click( function()
              {
                  $("#<%=FileUpload1.ClientID%>").uploadifyClearQueue();                          
                  return false;           
              }); 
      
          });
      </script> 
      
      
      </head>
      <body style='background:black;'>
      <div id='main'>
              <form id="form1" runat="server">
                  <br/>
                  <div class="demo">
      
                      <asp:FileUpload ID="FileUpload1" runat="server" />
                      <br />
                      <a href="#" id="startUploadLink">Start Upload</a>&nbsp; |&nbsp;
                      <a href="#" id="clearQueueLink">Clear</a> 
      
                  </div>
      
              </form>
      </div>
      </body>
      </html>
      

      这里是upload.ashx

      Imports System
      Imports System.Web
      
      Public Class Upload : Implements IHttpHandler
      
          Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
              Dim postedFile As HttpPostedFile = context.Request.Files("Filedata")
      
              Dim savepath As String = ""
              Dim tempPath As String = ""
              tempPath = context.Request("folder")
      
              'If you prefer to use web.config for folder path, uncomment below:
              'tempPath = System.Configuration.ConfigurationManager.AppSettings("FolderPath")
      
      
              savepath = context.Server.MapPath(tempPath)
              Dim filename As String = postedFile.FileName
              If Not System.IO.Directory.Exists(savepath) Then
                  System.IO.Directory.CreateDirectory(savepath)
              End If
      
              postedFile.SaveAs((savepath & "\") + filename)    
              context.Response.Write((tempPath & "/") + filename)
              context.Response.StatusCode = 200
          End Sub
      
          Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
              Get
                  Return False
              End Get
          End Property
      
      End Class
      

      【讨论】:

      • 感谢您的示例,JQuery uploadify 似乎很受欢迎。但它如何在不支持闪存的智能手机上运行呢?
      • 它将在支持 Flash 的 Android 和 AndroidTablet 上运行,但在 iPhone 和 iPad 上运气不佳。无论如何,如果用户代理字符串中有 ios 或 ipad,只需使用常规的上传控件即可。您无能为力,HTML5 和 webkit 无法替代 Flash。
      • 我见过一次 PHP/HTML/JavaScript + iFrame 组合,但我无法将 PHP 部分转换为 ASP.NET,我猜是因为 PHP 与 ASP.NET 是异步的,即同步。
      猜你喜欢
      • 2010-12-31
      • 2015-09-13
      • 2011-02-07
      • 2010-10-08
      • 2014-11-04
      • 2016-07-12
      • 2015-11-16
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多