繁体   English   中英

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

[英]Upload a file to a server using ASP.NET and C#

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

到目前为止,我已经在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有一个合理的了解,因此其中一些对我来说似乎很熟悉。

现在解释一下我的理解:

声明该表单,并为其指定ID“ uploadbanner”。 在传输文件时,我必须添加“ enctype ...”,因为它更安全,更灵活。

操作项告诉表单要发布到的位置。 在这种情况下,我将C#代码放在页面的顶部,因此不需要包含asp.net页面地址即可进行处理。 如果这样做,我将以与AJAX相同的方式包括一个asp.net页面(我认为吗?)。

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

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

现在我不太清楚的部分

  • 如果按下“提交”按钮时,页面顶部的C#代码将被激活,那么如果该字段为空白,它将什么都不做?
  • 如果多次按下该按钮,是否可以多次提交表单?
  • 如果是这样,那么这与AJAX?几乎相同,并且该文件将简单地传递到C#代码,从那里我可以使用它来做我需要的工作?
  • 我的最后一个问题是,我可以使用其他方法向提交按钮提交表单吗,例如,我可以制作一个普通的JavaScript按钮并告诉其提交表单吗?

如果按下“提交”按钮时,页面顶部的C#代码将被激活,那么如果该字段为空白,它将什么都不做?

是的,您的页面每次加载都会运行C#代码,人们会假设如果您提交表单,它将检查过帐的表单数据。 最好检查HTTP标头。

如果多次按下该按钮,是否可以多次提交表单?

是的,该表格将被多次提交。

如果是这样,那么这与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接口的类,而该接口又获取当前上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM