服务器之家

服务器之家 > 正文

ASP.NET文件上传Upload的实现方法

时间:2020-03-28 13:12     来源/作者:???笨小孩

本文实例为大家分享了ASP.NET 文件上传,供大家参考,具体内容如下

1、最近应项目开发的需求要实现附件的异步上传和下载。

2、上传:文件上传到指定的路径下,并返回上传文件的信息给前端界面,如:文件的图标、上传的文件名、文件的大小。

3、上传后,在前端界面上显示上传的文件信息,点击文件名实现将上传的文件下载到本地。

4、先展示一下Demo运行的效果图:

ASP.NET文件上传Upload的实现方法

点击提交后:

ASP.NET文件上传Upload的实现方法

点击文件名实现下载到本地:

ASP.NET文件上传Upload的实现方法

5、下面就给出前台代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Ajax Form - jQuery EasyUI Demo</title>
 <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
 <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css">
 <link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/demo/demo.css">
 <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
 <script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
</head>
<body>
 <h2>Ajax Form Demo</h2>
 <div class="demo-info" style="margin-bottom:10px">
 <div class="demo-tip icon-tip"> </div>
 <div>Type in input box and submit the form.</div>
 </div>
 
 <div class="easyui-panel" title="Ajax Form" style="width:300px;padding:10px;">
 <form id="ff" action="api/Loding" method="post" enctype="multipart/form-data">
  <table>
  <tr>
   <td>Name:</td>
   <td><input name="name" class="f1 easyui-textbox"></input></td>
  </tr>
  <tr>
   <td>Email:</td>
   <td><input name="email" class="f1 easyui-textbox"></input></td>
  </tr>
  <tr>
   <td>Phone:</td>
   <td><input name="phone" class="f1 easyui-textbox"></input></td>
  </tr>
  <tr>
   <td>File:</td>
   <td><input name="file" class="f1 easyui-filebox"></input></td>
  </tr>
  <tr>
   <td></td>
   <td><input type="submit" value="提交"></input></td>
  </tr>
  </table>
  <input type="text" value="LodingTable" name="tableName" hidden="hidden" />
 </form>
 </div>
 <div>
 <img id="img" src="" width="20" height="20" />
 <a id="downLoad" downloadid="0" href="#"></a>
 <label>文件大小:</label>
 <label class="size"></label><button id="delete">删除</button>
 <button id="loding">导入1</button>
 </div>
 <style scoped>
 .f1 {
  width: 200px;
 }
 </style>
 <script type="text/javascript">
 $(function () {
  $("#loding").hide();
  $("#delete").hide().click(function () {
  alert("删除文件");
  });
  $("#loding").click(function () {
  var tUrl = '/api/Loding/Get';
  //var tJsonStr = '{"idInventoryPrice":"4","withdrawDetails":[{"cInvCode":"800487","cInvCodeSub":"00","iConverDiscount":"0","iUnitPrice":"9.9","iSalePrice":"9.9"},{"cInvCode":"800689","cInvCodeSub":"00","iConverDiscount":"0","iUnitPrice":"6.5","iSalePrice":"5.9"}]}';
  $.ajax({
   type: "Get",
   url: tUrl,
   dataType: "json",
   async: false,
   success: function (data) {
   alert(JSON.stringify(data));
   }
  });
  });
  $('#ff').form({
  success: function (data) {
   var json = JSON.parse(data);
   if (json.result == 1) {
   $("#delete").show();
   $("#img").attr("src", json.details[0].AttachmentNameTypeICO);
   $("#downLoad").attr("downloadid", json.details[0].ID);   $("#downLoad").html(json.details[0].AttachmentName);
   $(".size").html(json.details[0].AttachSize + "KB");
   var tUrl = 'http://localhost:11703/api/Loding/DownLoad?ID=' + $("#downLoad").attr("downloadid");
   $("#downLoad").attr("href", tUrl);
   }
   else {
   alert(json.resultdetail);
   }
  }
  });
 });
 </script>
</body>
</html>

6、后台上传代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
NameValueCollection nvf = HttpContext.Current.Request.Form;
  if (!Request.Content.IsMimeMultipartContent())
  {
  throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
  }
  string tempPath = "/Upload/" + DateTime.Now.ToString("yyyy-MM-dd/");
  string fileSaveLocation = HttpContext.Current.Server.MapPath("~" + tempPath);//附件的保存地址
  Dictionary<string, object> dic = new Dictionary<string, object>();
  if (!Directory.Exists(fileSaveLocation))
  {
  Directory.CreateDirectory(fileSaveLocation);
  }
  CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(fileSaveLocation);
  try
  {
  var result = await Request.Content.ReadAsMultipartAsync(provider).ContinueWith<Dictionary<string, object>>(x =>
  {
   var file = provider.FileData[0];
   FileInfo fileinfo = new FileInfo(file.LocalFileName);
   if (fileinfo.Length <= 0)
   {
   dic.Add("result", -1);
   dic.Add("resultdetail", "未上传文件");
   }
   else
   {
   double? filelength = fileinfo.Length / 1024.0;
   if (filelength > 10 * 1024)
   {
    dic.Add("result", -1);
    dic.Add("resultdetail", "上传文件不能大于10M");
   }
   else
   {
    string saveFileName = Guid.NewGuid().ToString() + fileinfo.Extension;
    fileinfo.CopyTo(Path.Combine(fileSaveLocation, saveFileName), true);
    fileinfo.Delete();
    dic.Add("result", 1);
    dic.Add("resultdetail", "上传成功");
    dic.Add("realPath", file.LocalFileName);//附件保存的绝对路径
    dic.Add("attachmentType", fileinfo.Extension);//附件类型
    dic.Add("attachmentName", Path.GetFileName(file.LocalFileName));//上传的附件名
    dic.Add("attachSize", Convert.ToInt32(filelength));//附件大小KB
    dic.Add("aealPath", tempPath + saveFileName);//附件保存相对路径
   }
   }
   return dic;
  }, TaskScheduler.FromCurrentSynchronizationContext());
  }
  catch (Exception ex)
  {
  return HandleJson.ToJson(ex.ToString(), false);
  }
  var isSuccess = dic["result"].TryToInt() == 1;
  var msg = dic["resultdetail"].TryToString();//返回上传信息
  var realPath = string.Empty;//附件保存的绝对路径
  var relativePath = string.Empty;//返回相对路径
  var AttachSize = 0;//文件大小kB
  var AttachmentType = string.Empty;//文件扩展名
  var AttachmentName = string.Empty;//原文件名
  if (isSuccess)
  {
  realPath = dic["realPath"].TryToString();
  relativePath = dic["aealPath"].TryToString();
  AttachSize = dic["attachSize"].TryToInt();
  AttachmentType = dic["attachmentType"].TryToString();
  AttachmentName = dic["attachmentName"].TryToString();
  }
 
  StringBuilder sql = new StringBuilder();
  if (isSuccess)
  {
  try
  {
   #region 获取图标路径
 
   var ICOPath = string.Empty;
   sql.Append(@"SELECT * FROM dbo.AttachmentType(NOLOCK) WHERE AttachmentType=@AttachmentType");
   var ICOTable = Common.HandleSQL.GetData(sql.ToString(), null, new SqlParameter[] { new SqlParameter("@AttachmentType", AttachmentType) });
   if (ICOTable.Rows.Count <= 0)
   {
   ICOPath = "";
   }
   else
   {
   ICOPath = ICOTable.Rows[0]["AttachmentNameTypeICO"].ToString();
   }
 
   #endregion 获取图标路径
 
   #region 保存上传记录
 
   sql.Clear();
   sql.Append(@"DECLARE @ID INT
SELECT @ID=MAX(ID)+1 FROM dbo.Attachment(NOLOCK)
IF(@ID IS NULL)
BEGIN
SET @ID=1
END
INSERT INTO dbo.Attachment
 ( ID ,
  AttachmentName ,
  AttachmentType ,
  RealPath ,
  AttachSize ,
  UpLoadDate ,
  UpLoadPerson ,
  UpLoadIPAddress
 )
VALUES ( @ID , -- ID - int
  @AttachmentName , -- AttachmentName - nvarchar(max)
  @AttachmentType , -- AttachmentType - nvarchar(50)
  @RealPath , -- RealPath - nvarchar(max)
  @AttachSize , -- AttachSize - bigint
  GETDATE() , -- UpLoadDate - datetime
  @UpLoadPerson , -- UpLoadPerson - nvarchar(50)
  @UpLoadIPAddress -- UpLoadIPAddress - varchar(50)
 )
SELECT * FROM dbo.Attachment(NOLOCK) WHERE ID=@ID;
");
   SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@AttachmentName", AttachmentName),
   new SqlParameter("@AttachSize", AttachSize), new SqlParameter("@RealPath", relativePath),
   new SqlParameter("@AttachmentType", AttachmentType),new SqlParameter("@UpLoadPerson","魏小伟"),new SqlParameter("@UpLoadIPAddress",HandleLog.getIPAddress()) };
   var insert = GetData(sql.ToString(), null, paras);
   insert.Columns.Add("AttachmentNameTypeICO", typeof(string));
   insert.Rows[0]["AttachmentNameTypeICO"] = ICOPath;
   int ID = Convert.ToInt32(insert.Rows[0]["ID"].ToString());//上传附件的ID
   return HandleJson.ToJson(insert, 0);
 
   #endregion 保存上传记录
  }
  catch (Exception ex)
  {
   if (System.IO.File.Exists(realPath))
   {
   File.Delete(realPath);
   }
   return HandleJson.ToJson(ex.ToString(), false);
  }
  }
  else
  {
  return HandleJson.ToJson(msg, false);
  }

7、下载代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
[HttpGet, Route("api/Loding/DownLoad")]
 public HttpResponseMessage DownLoad()
 {
  #region 获取界面参数
 
  NameValueCollection nvc = HttpContext.Current.Request.QueryString;
  int ID = nvc["ID"].TryToInt();
  if (ID <= 0)
  {
  return HandleJson.ToJson("传入参数错误", false);
  }
 
  #endregion 获取界面参数
 
  #region SQL
 
  StringBuilder sql = new StringBuilder();
  sql.Append(@"SELECT * FROM dbo.Attachment(NOLOCK) WHERE ID=@ID ");
 
  #endregion SQL
 
  #region 执行SQL
 
  var dt = HandleSQL.GetData(sql.ToString(), null, new SqlParameter[] { new SqlParameter("@ID", ID) });
  if (dt.Rows.Count <= 0)
  {
  return HandleJson.ToJson("未找到下载文件", false);
  }
  var filePath = HttpContext.Current.Server.MapPath("~" + dt.Rows[0]["RealPath"].TryToString());//下载文件的绝对路径
  string fileName = dt.Rows[0]["AttachmentName"].TryToString();//下载的文件名
 
  #endregion 执行SQL
 
  #region 下载文件并添加下载记录
 
  try
  {
  //var FilePath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/download/" + fileName);
  var stream = new FileStream(filePath, FileMode.Open);
  HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
  response.Content = new StreamContent(stream);
  response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
  response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
  {
   FileName = fileName
  };
 
  #region 添加下载记录
 
  sql.Clear();
  SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@ID", ID), new SqlParameter("@DownLoadPerson", "魏小伟"), new SqlParameter("@DownLoadIP", HandleLog.getIPAddress()) };
  sql.Append(@"DECLARE @AutoID INT
SELECT @AutoID=MAX(AutoID)+1 FROM dbo.AttachmentDowLoadLog(NOLOCK)
IF(@AutoID IS NULL)
BEGIN
SET @AutoID=1
END
INSERT INTO dbo.AttachmentDowLoadLog
 ( AutoID ,
  ID ,
  DownLoadPerson ,
  DownLoadDate ,
  DownLoadIP
 )
VALUES ( @AutoID , -- AutoID - int
  @ID , -- ID - int
  @DownLoadPerson , -- DownLoadPerson - nvarchar(max)
  GETDATE() , -- DownLoadDate - datetime
  @DownLoadIP -- DownLoadIP - nvarchar(50)
 );");
  execSQL(sql.ToString(), null, paras);
 
  #endregion 添加下载记录
 
  return response;
  }
  catch
  {
  return new HttpResponseMessage(HttpStatusCode.NoContent);
  }
 
  #endregion 下载文件并添加下载记录
 }

8、以上只是我个人的一个小Demo,有不对或需要改进的地方还请大家多多提点!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

相关文章

热门资讯

沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部