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

2025-05-29 0 107

本文实例为大家分享了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,有不对或需要改进的地方还请大家多多提点!

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 ASP.NET文件上传Upload的实现方法 https://www.kuaiidc.com/100212.html

相关文章

发表评论
暂无评论