javascript - 使用 ASP.NET 和 C# 将文件上传到服务器

标签 javascript c# jquery html forms

我是表单新手,正在尝试了解正在发生的事情。我看了很多问题和教程,但对某些点感到不清楚。

到目前为止,我已经在 aspx 页面中创建了以下表单:

<form id="uploadbanner" enctype="multipart/form-data" method="post" action="#">
    <span class="txtSmallGrey fl" style="display:block; width:200px; margin:15px; margin-bottom:2px">
        <%= oUtils.GetContentText("Collect_Config_upload_sound") %>
    </span>
    <input type="file"  name="SoundFile" id="SoundFile" style="margin:15px; margin-bottom:2px">        
    <input type="submit" value="Upload" id="submit" style="float:left; margin-left:245px; margin-top:1px; height:20px;">    
</form>

我在页面顶部有以下脚本:

<%
        if(Request.Form["SoundFile"] != "")
        {
            HttpPostedFile file = Request.Files["SoundFile"];
            string fname = Path.GetFileName(file.FileName);
            file.SaveAs(Server.MapPath(Path.Combine("~/App_Data/", fname)));
        }
%>

我对 AJAX 有一定的了解,因此其中一些内容对我来说似乎很熟悉。

现在解释一下我的理解:

该表单已声明并指定了“uploadbanner”的 id。当我传输文件时,我必须包含“enctype...”,我发布该文件是因为它更安全、更灵活。

操作术语告诉表单要发布到哪里。在本例中,我已将 C# 代码放在页面顶部,因此不需要包含 asp.net 页面地址来处理此问题。如果我这样做,我会包含一个 asp.net 页面,就像 AJAX 一样(我想?)。

表单标签内带有输入标签的任何内容都将发布在表单中,并将发送名称和值。

当按下提交按钮时,表单将被提交到服务器端代码进行处理。到目前为止,我觉得我明白发生了什么。

现在我感觉不太清楚的部分,

  • 是不是当按下“提交”按钮时,C# 代码 页面顶部的将被激活,因此如果该字段是 空白它不会做任何事情吗?
  • 如果多次按下按钮,表单会是 多次提交?
  • 如果是这样,那么这与 AJAX 的方式非常相似?并且该文件将 只需传递给 C# 代码,我就可以在其中执行我需要的操作 是吗?
  • 我的最后一个问题是,我可以使用替代方法提交表单吗? 提交按钮的方法,例如我可以制作一个普通的 JavaScript 按钮吗 并告诉它提交表单?

最佳答案

是否是这样,当按下“提交”按钮时,页面顶部的 C# 代码将被激活,因此如果该字段为空,则不会执行任何操作?

是的,每次加载页面时,它都会运行 C# 代码,人们会认为如果您提交表单,它就会检查发布的表单数据。最好检查 HTTP header 。

如果多次按下按钮,表单是否会被提交多次?

是的,表单将提交多次。

如果是这样,那么这与 AJAX 的方式非常相似?并且该文件将简单地传递给 C# 代码,我可以从那里用它来做我需要的事情?

它在 HTTP 请求的意义上类似,但您发布到带有附加文件的页面,然后 C# 通过运行 Request.Form 然后运行 ​​Request.Files 和 Posts 到服务器来检查页面是否附加了文件.

我的最后一个问题是,我可以使用提交按钮的替代方法提交表单,例如我可以制作一个普通的 JavaScript 按钮并告诉它提交表单吗?

普通 JavaScript 按钮是什么意思?您不必使用提交按钮。只要您传入文件并加载页面,代码仍然会运行。当我发布到 HTTPHandler 时,我有方法。代码片段如下:

public void ProcessRequest(HttpContext context)
 {
    context.Response.ContentType = "text/plain";
    HttpPostedFile postedFile = context.Request.Files["Filedata"];
    string filename = postedFile.FileName;
    var Extension = filename.Substring(filename.LastIndexOf('.') 
    + 1).ToLower();

    string savepath =HttpContext.Current.Server.MapPath("/images/profile/");

    postedFile.SaveAs(savepath + @"\" + user.uid + filename);
 }

因此,当提交时,我指向 HttpHandler.ashx,它是一个实现 IHttpHandler 接口(interface)的类,它又获取当前上下文。

关于javascript - 使用 ASP.NET 和 C# 将文件上传到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588937/

相关文章:

javascript - 如何在 jQuery when() 函数中传递 XHR 请求的动态列表?

c# - 在 ASP.NET、C# 中流式传输文件?

c# - 在 DataGridView 中将 IsNewRow 状态更改为 false 或模拟单元格上的击键

javascript - 在滚动停止处捕捉滚动

javascript - 如何在没有嵌套导航的情况下进行导航

javascript - reactjs - 获取作为谷歌仅显示空白页面

javascript - 如何使用 jQuery 检查某个元素是否至少具有指定类列表中的一个类?

c# - 将参数传递给 AsyncCallback 函数?

javascript - 刷新 javascript 页面而不刷新 HTML,但随着窗口宽度的变化

jquery - 使用jQuery改变整个wordpress网站的CSS