使用ASP.NET MVC的多个文件上载

时间:2011-01-25 19:33:36

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

您好,

我从2008年开始由Steve Sanders实现了这个plugin。在我的解决方案中,我有3个按钮可以上传3个,这很好用。但这不是一个完美的契合,问题是如果thera对我来说是更好的解决方案吗?

我需要的是:

  1. 能够上传多个文件
  2. 触发控制操作时应该可以使用文件
  3. 最终用户应该能够取消上传的文件(据我所知,这对于Steves插件是不可能的)
  4. 易于与ASP.NET MVC一起使用
  5. 如果对控制操作发布了帖子并且返回了验证错误,则上传可能不会消失。
  6. 请求建议

4 个答案:

答案 0 :(得分:2)

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

看看this StackOverflow问题 - 在那里你可以找到有关如何在ASP.NET MVC中使用它的更多信息。

答案 1 :(得分:2)

引人注目的是Steve Sanders的插件使用了swfUpload,它可以支持你需要的一切。然而,他的插件似乎没有公开swfUpload的所有功能,例如取消上传。

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

这是一个demo of swfUpload,您可以取消上传

答案 2 :(得分:1)

另一个选项是 SlickUpload

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

它也是完全可定制的。

Download the trial并亲自看看:)

答案 3 :(得分:1)

使用纯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     &lt;%@ WebHandler Language =“VB”Class =“Upload”%&gt;

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