【问题标题】:How can I upload a file using JavaScript without a postback?如何在没有回发的情况下使用 JavaScript 上传文件?
【发布时间】:2010-10-06 09:22:58
【问题描述】:

我正在处理 ASP.NET 中的文件上传。我用<input type=file id=upload><input type=button id="btnupload" value="File Upload">

我想用 JavaScript 上传文件。更新面板不起作用,我不希望它回发并刷新页面。

谢谢,但如果您有与 javascript 中的 fileUpload 相关的代码,请发送给我。请帮我。

【问题讨论】:

    标签: asp.net javascript upload


    【解决方案1】:

    使用 jquery 表单插件实现上传功能 (http://www.malsup.com/jquery/form/) 使用 (http://www.fyneworks.com/jquery/multiple-file-upload/) 可以指定要上传的多个文件

    这就是它的工作原理,表单插件让您无需刷新即可将数据发布到页面,多文件插件让您通过浏览指定多个文件。

    <form id="uploadForm" enctype="multipart/form-data" method="post" action="FileHandler.ashx">
    <input type="hidden" value="100000" name="MAX_FILE_SIZE"/>
    File:
    <input type="file" name="file"/>
    <input type="submit" value="Submit"/>
    </form>
    

    所以基本上上面的小 html 提交到 FileHandler.ashx,输入框中的任何内容(希望如此),在你的 asp 项目中添加一个 HTTP 处理程序,下面的小代码

    <%@ WebHandler Language="C#" Class="FileHandler" %>
    
    using System;
    using System.Web;
    using System.IO;
    
    public class FileHandler : IHttpHandler
    {
    
    public void ProcessRequest(HttpContext context)
    {
    string strFileName = Path.GetFileName(context.Request.Files[0].FileName);
    string strExtension = Path.GetExtension(context.Request.Files[0].FileName).ToLower();
    string strSaveLocation = context.Server.MapPath("Upload") + "" + strFileName;
    context.Request.Files[0].SaveAs(strSaveLocation);
    
    context.Response.ContentType = "text/plain";
    context.Response.Write("success");
    }
    
    public bool IsReusable
    {
    get
    {
    return false;
    }
    }
    }
    

    这里缺少的就是你的 aspx 页面上的 js 脚本,我想 :) 祝你好运

    【讨论】:

    • 当我这样做时,我发现它会回发我需要发布文件而不回发???
    • 请在纯javascript中了解它
    • 我尝试了相同的代码,但得到了 context.Request.Files.Count = 0。知道为什么吗?
    【解决方案2】:

    您可以使用 jQuery 和 jQuery form plugin。我在几个项目中使用了这个组合,我没有任何问题,即使是大文件(10mb)

    <form action="form.asp" method="post">
    .......
    </form>
    $('form').submit(function(){
     $(this).ajaxSubmit(function(data){
      $('#updateDiv').html(data); // or append/prepend/whatever
     })
     return false
    })
    

    当然,表单的操作会返回您需要更新的内容。您可能需要添加一些额外的函数来处理错误,但这应该可以正常工作

    【讨论】:

    • 感谢 lonut Staicu,但如果你能给我一些我能正确理解的例子。
    【解决方案3】:

    我不确定使用 ASP.NET 的“正确”方式,但通常你会想要你的表单,以及表单发布到的隐藏 iframe:

    <script type="text/javascript">
        function handleUploadResponse(...) {
            // do something...
        }
    </script>
    <form method="post" action="upload.aspx" target="hiddenframe" enctype="multipart/form-data"></form>
    <iframe id="hiddenframe" name="hiddenframe" style="display:none"></iframe>
    

    当您提交表单时,这将发布到任何脚本将处理隐藏框架中的上传。完成后,隐藏框架的页面调用window.parent.handleUploadResponse(...);,后者调用启动上传的父页面上的handleUploadResponse() 函数。

    【讨论】:

    • Matt Berseth 的上传组件与您所描述的类似。 tinyurl.com/acu3hc
    • 谢谢,但如果你给我他们的简短例子,那么我可以正确理解,如果你有任何与此相关的链接,那么也发给我。请帮帮我....
    【解决方案4】:

    如果您使用的是 Visual Studio 2008(或在 05 中安装了 ajax),则在您的输入字段周围包裹一个更新面板,这将使用 javascript (ajax) 异步回发。

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </ContentTemplate>
    </asp:UpdatePanel>
    

    【讨论】:

    • 它在内部更新面板中有效吗?因为我已经用过 Upper Updatepannel,谢谢。
    • 您是指另一个更新面板中的更新面板吗? ..因为我不认为它会有所不同。
    【解决方案5】:

    如果要阻止页面刷新,请发送204 No Content HTTP 标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2013-01-13
      • 1970-01-01
      • 2012-04-26
      相关资源
      最近更新 更多