最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
总结三种ASP.Net中上传文件的方法
时间:2022-06-25 08:50:25 编辑:袖梨 来源:一聚教程网
ASP.Net的WebForm开发模式中,封装了FileUpload控件,可以方便的进行文件上传操作。但有时,你可能不希望使用ASP.Net中的服务器控件,仅仅使用Input标签来实现文件上传。当然也是可以的。下面总结在项目中使用过的上传文件的方式。
本文我们总结了三种ASP.Net中上传文件的方法。
一、使用Asp.Net中的FileUpload服务器端控件实现上传
使用asp.net中的服务器端控件FileUpload上传文件非常方便。FileUpload对上传操作进行了封装,你只需要调用SaveAs方法即可完成上传。下面是简单的上传代码。
服务器端控件上传
protected void FileUploadButton_Click(object sender, EventArgs e)
{
if (MyFileUpload.HasFile)
{
string filePath = Server.MapPath("~/UploadFiles/");
string fileName = MyFileUpload.PostedFile.FileName;
MyFileUpload.SaveAs(filePath + fileName);
Response.Write("
上传成功!
");}
else
{
Response.Write("
请选择要上传的文件!
");}
}
当然,在实际项目中就不能这么简单的保存文件了。你至少得增加一些文件类型的判断,防止用户上传一些能够威胁到系统安全的文件。你可以采用客户端JS验证的方式,也能够在.cs的服务器端代码中验证。
在asp.Net WebForm开发框架下,我们也可以利用Html的Input标签来上传文件。这时候需要注意的一点,这个type为file的Input标签需要加上runat="server"属性,否则在后台Request.Files获取不到上传的文件。
使用Html的Input标签上传
onclick="InputFileUploadButton_Click" />
protected void InputFileUploadButton_Click(object sender, EventArgs e)
{
HttpFileCollection files = Request.Files;
string filePath = Server.MapPath("~/UploadFiles/");
if (files.Count != 0)
{
string fileName = files[0].FileName;
files[0].SaveAs(Path.Combine(filePath, fileName));
Response.Write("
上传成功
");}
else
{
Response.Write("
未获取到Files:"+ files.Count.ToString()+"
");}
}
以这种方式进行上传的时候,好处就是可以方便的用JS生成多个Input标签来上传多个文件。且此时需要注意的是,Input标签必须要有name属性。在后台,只需要循环调用SaveAs()方法即可。
接下来的两种上传方式(二和三)都会用到Ajax异步提交数据,后台使用一个.ashx文件进行处理。两种方式共用一个文件,ajax传入的url参数中加一个method来区分哪种方式传过来的。后台代码如下:
public void ProcessRequest(HttpContext context)
{
string method = context.Request.QueryString["method"].ToString();
switch (method)
{
case "ajaxFileUpload":
ajaxFileUpload(context);
break;
case "formDataUpload":
formDataUpload(context);
break;
default:
break;
}
}
private static void formDataUpload(HttpContext context)
{
HttpFileCollection files = context.Request.Files;
string msg = string.Empty;
string error = string.Empty;
if (files.Count > 0)
{
files[0].SaveAs(ConfigurationManager.AppSettings["FilePath"].ToString() + System.IO.Path.GetFileName(files[0].FileName));
msg = " 成功! 文件大小为:" + files[0].ContentLength;
string res = "{ error:'" + error + "', msg:'" + msg + "'}";
context.Response.Write(res);
context.Response.End();
}
}
private static void ajaxFileUpload(HttpContext context)
{
HttpFileCollection files = context.Request.Files;
string msg = string.Empty;
string error = string.Empty;
if (files.Count > 0)
{
files[0].SaveAs(ConfigurationManager.AppSettings["FilePath"].ToString() + System.IO.Path.GetFileName(files[0].FileName));
msg = " 成功! 文件大小为:" + files[0].ContentLength;
string res = "{ error:'" + error + "', msg:'" + msg + "'}";
context.Response.Write(res);
context.Response.End();
}
}
二、使用Html中的Input标签加FormData对象实现
使用这种方式上传附件,对浏览器有些要求。FormData属于Html5中新增的特性,IE浏览器只有在10以上才支持。所以,个中利弊自己权衡,但用起来觉得方便。下面直接上代码:
function formDataUpload() {
var fileupload = document.getElementById('fileToUpload').files;
var formdata = new FormData();
formdata.append('files', fileupload[0]);
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("post", 'Handlers/FileUpload.ashx?method=formDataUpload');
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
alert('上传成功');
}
}
xmlHttp.send(formdata);
}
三、使用Jquery中的ajaxfileupload.js插件实现上传
使用此方法,需要引用jquery.js和ajaxfileupload.js两个文件。还需要注意的部分是两个文件的版本匹配问题,可能在使用过程中会出现些异常。此时发挥搜索引擎的作用,总能找到你需要的解决方案。
JavaScript代码如下:
function ajaxFileUpLoad() {
$.ajaxFileUpload(
{
url: 'Handlers/FileUpload.ashx?method=ajaxFileUpload',
secureuri: false,
fileElementId: 'fileToUpload',
dataType: 'json',
success: function (data, status) {
$('#img1').attr("src", data.imgurl);
if (typeof (data.error) != 'undefined') {
if (data.error != '') {
alert(data.error);
} else {
alert(data.msg);
}
}
},
error: function (data, status, e) {
alert(e);
}
}
)
return false;
}
Html页面上的代码如下:
总结
以上总结了几种上传文件的方式,也简单的说明了一些使用中需要注意的问题。当然,可能遇到的问题还不止这些,如果在开发过程中还遇到了其他稀奇古怪的问题,可自行搜索相关问题。每一次针对遇到的问题的解决,都是对这方面的知识一次更深入的理解。在不断解决问题中慢慢进步。
相关文章
- 原神欧洛伦怎么培养 原神欧洛伦培养攻略介绍 11-22
- 炉石传说跳费大哥德卡组怎么样 炉石传说跳费大哥德卡组推荐介绍 11-22
- 蛋仔派对曙光龙女芙瑞怎么样 11-22
- 原神恰斯卡怎么养成 11-22
- 光遇11.22免费魔法有什么 11-22
- 光遇11.22大蜡烛在哪里 11-22