【问题标题】:Can you recommend alternative FileUpload control for asp.net-mvc?你能推荐 asp.net-mvc 的替代 FileUpload 控件吗?
【发布时间】:2010-09-20 04:46:22
【问题描述】:

目前使用 System.Web.UI.WebControls.FileUpload 包装在我们自己的控件中。

我们有 Telerik 的许可证。我想知道是否有人有这方面的经验或者可以推荐一个更好的?

一些衡量标准

  • 验证
  • 性能
  • 多个文件
  • 本地化(browse 很难)
  • 安全

【问题讨论】:

    标签: c# asp.net-mvc file-upload web-controls


    【解决方案1】:

    就个人而言,如果您有 Telerik 控件,我会试一试。我发现它们非常有帮助,用户体验也很好。他们的上传控制非常好。

    【讨论】:

      【解决方案2】:

      我刚刚发布了这个in another question,但是如果您使用这个ActiveX 控件,您将能够快速有效地处理图像。该组件实际上会在发送图像之前调整客户端计算机上的图像大小。这样可以减少不必要的带宽并一次传输多个图像。

      【讨论】:

        【解决方案3】:

        我们扩展了 FileUploadControl 以添加一些验证。我们还编写了自己的控件,允许一次上传多个文件。我们目前正在评估两者。希望我们决定一个,我不想维护 2 个不同的上传控件。

        【讨论】:

          【解决方案4】:

          查看 Dean Brettle 的 NeatUpload。它基本上是一个自定义的 HttpHandler,可以将文件流式传输到磁盘,并具有大量额外的可配置性。它是开源的,Dean 绝对是支持他的用户的明星。

          【讨论】:

            【解决方案5】:

            看看这个:

            Html-5-Uploader

            在您的网页上拖放多个文件!

            链接并不总是有效,所以这里又是:http://www.igloolab.com/jquery-html5-uploader/

            .

            控制器:(根据我原来的代码修改,希望不要忘记,但是很清楚)

                 <HttpPost()> _
                 Public Function Upload(uploadedFile As System.Web.HttpPostedFileBase) As ActionResult
                    If uploadedFile IsNot Nothing Then 
                        If uploadedFile.ContentLength > 0 Then
            
                           Dim mimeType As String = Nothing 
                            'Upload
                            Dim PathFileName As String =   System.IO.Path.GetFileName(uploadedFile.FileName)
            
                             Dim path =  System.IO.Path.Combine(Server.MapPath("~/App_Data/Uploads"), PathFileName)
            
                            If Not System.IO.Directory.Exists(Path) Then
                                System.IO.Directory.CreateDirectory(Path)
                            End If
            
                            Dim firstLoop As Boolean = True
                            uploadedFile.SaveAs(path)                  
                         Next
                    End If
                    Return Nothing
                End Function
            

            这是视图(不要忘记指向 css 和 js 的链接;))

                 <h1>
                        @SharedStrings.Upload</h1>
                    <h2>
                        @SharedStrings.UploadInformation</h2>
                    <div id="dropbox">
                    </div>
                    <div id="upload">
                    </div>
                    <script type="text/javascript">
            
                        $(function () {
            
                            var fileTemplate = "<div id=\"{{id}}\">"; fileTemplate += "<div class=\"progressbar\"></div>"; fileTemplate += "<div class=\"preview\"></div>"; fileTemplate += "<div class=\"filename\">{{filename}}</div>"; fileTemplate += "</div>"; function slugify(text) { text = text.replace(/[^-a-zA-Z0-9,&\s]+/ig, ''); text = text.replace(/-/gi, "_"); text = text.replace(/\s/gi, "-"); return text; }
                            $("#dropbox").html5Uploader({ onClientLoadStart: function (e, file) {
                                var upload = $("#upload"); if (upload.is(":hidden")) { upload.show(); }
                                upload.append(fileTemplate.replace(/{{id}}/g, slugify(file.name)).replace(/{{filename}}/g, file.name));
                            }, onClientLoad: function (e, file) { /*$("#" + slugify(file.name)).find(".preview").append("<img src=\"" + e.target.result + "\" alt=\"\">");*/ }, onServerLoadStart: function (e, file) { $("#" + slugify(file.name)).find(".progressbar").progressbar({ value: 0 }); }, onServerProgress: function (e, file) { if (e.lengthComputable) { var percentComplete = (e.loaded / e.total) * 100; $("#" + slugify(file.name)).find(".progressbar").progressbar({ value: percentComplete }); } }, onServerLoad: function (e, file) { $("#" + slugify(file.name)).find(".progressbar").progressbar({ value: 100 }); } 
                            }); 
                        });
                    </script>
            

            还有我的css

             /*html 5 uploader*/
            #dropbox 
            {
            /*picture where people would drag-drop their files to*/
             background-image:url(../Images/UploadToMedia.png);
             height:128px;
             margin-bottom:40px;
             margin-left:auto;
             margin-right:auto;
             background-repeat:no-repeat;
             margin-top:0;
             width:128px;
            }
            

            【讨论】:

              【解决方案6】:

              您可以尝试使用基于 Flash 的解决方案,该解决方案允许您显示任何文本、文本框、按钮或其他任何内容,作为您自己的文件上传控件的一部分。这些解决方案通常会在页面上放置一个 1x1 的 flash 电影,作为 javascript 和 flash 之间的桥梁,以便 javascript 可以动态调用 flash 的文件上传框。

              在最近的一个项目中,我使用了FancyUpload 来做到这一点。

              【讨论】:

              • 更不用说 Silverlight。我刚刚在 Silverlight 2 中为我们的产品实现了多文件上传解决方案。但坦率地说,如果您找到适合您需求的东西,最好购买。
              猜你喜欢
              • 2010-09-07
              • 2011-06-06
              • 2011-09-16
              • 1970-01-01
              • 2012-02-23
              • 2011-06-29
              • 2011-04-09
              • 1970-01-01
              • 2014-02-26
              相关资源
              最近更新 更多