日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core文件上传与下载(多种上传方式)

發布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core文件上传与下载(多种上传方式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

前段時間項目上線,實在太忙,最近終于開始可以研究研究ASP.NET Core了.

打算寫個系列,但是還沒想好目錄,今天先來一篇,后面在整理吧.

ASP.NET Core 2.0 發展到現在,已經很成熟了.下個項目爭取使用吧.

?

正文

1.使用模型綁定上傳文件(官方例子)

官方機器翻譯的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads

這里吐槽一下 - -,這TM的機器翻譯..還不如自己看E文的..

首先我們需要創建一個form表單如下:

<form method="post" enctype="multipart/form-data" asp-controller="UpLoadFile" asp-action="FileSave">

? ? ? ? <div>

? ? ? ? ? ? <div>

? ? ? ? ? ? ? ? <p>Form表單多個上傳文件:</p>

? ? ? ? ? ? ? ? <input type="file" name="files" multiple />

? ? ? ? ? ? ? ? <input type="submit" value="上傳" />

? ? ? ? ? ? </div>

? ? ? ? </div>

? ? </form>

其中,asp-controllerasp-action,(這個是TagHelper的玩法,以后講)是我們要訪問的控制器和方法.

給我們的input標簽加上?multiple 屬性,來支持多文件上傳.

創建一個控制器,我們編寫上傳方法如下:

public async Task<IActionResult> FileSave(List<IFormFile> files)

? ? ? ? {

? ? ? ? ? ? var files = Request.Form.Files;

? ? ? ? ? ? long size = files.Sum(f => f.Length);

? ? ? ? ? ? string webRootPath = _hostingEnvironment.WebRootPath;

? ? ? ? ? ? string contentRootPath = _hostingEnvironment.ContentRootPath;

? ? ? ? ? ? foreach (var formFile in files)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (formFile.Length > 0)

? ? ? ? ? ? ? ? {


? ? ? ? ? ? ? ? ? ? string fileExt = GetFileExt(formFile.FileName); //文件擴展名,不含“.”

? ? ? ? ? ? ? ? ? ? long fileSize = formFile.Length; //獲得文件大小,以字節為單位

? ? ? ? ? ? ? ? ? ? string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //隨機生成新的文件名

? ? ? ? ? ? ? ? ? ? var filePath = webRootPath +"/upload/" + newFileName;

? ? ? ? ? ? ? ? ? ? using (var stream = new FileStream(filePath, FileMode.Create))

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? await formFile.CopyToAsync(stream);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }


? ? ? ? ? ? return Ok(new { count = files.Count, size });

? ? ? ? }

這里我們采用Asp.NET Core的新接口IFormFile,??IFormFile的具體定義如下:

public interface IFormFile

{

? ? string ContentType { get; }

? ? string ContentDisposition { get; }

? ? IHeaderDictionary Headers { get; }

? ? long Length { get; }

? ? string Name { get; }

? ? string FileName { get; }

? ? Stream OpenReadStream();

? ? void CopyTo(Stream target);

? ? Task CopyToAsync(Stream target, CancellationToken cancellationToken = null);

}

上面的代碼使用了IHostingEnvironment來獲取項目的根目錄地址.

構造函數注入的代碼如下:

? ? ? ? private readonly IHostingEnvironment _hostingEnvironment;


? ? ? ? public UpLoadFileController(IHostingEnvironment hostingEnvironment)

? ? ? ? {

? ? ? ? ? ? _hostingEnvironment = hostingEnvironment;

? ? ? ? }

這樣,我們就完成了控制器的編寫,然后到運行前端,上傳文件..效果如下:

通過IFormFile的CopyToAsync方法,我們就可以把這個文件流復制下來并保存到本地即可.

?

2.使用Ajax上傳文件

上面我們是使用表單上傳,但是項目過程中,大部分情況會使用Ajax進行上傳,所以我們就來講講如何使用Ajax上傳.

首先編寫HTML代碼如下:

<div>

? ? <form id="uploadForm">

? ? ? ? AJAX上傳多文件: <input type="file" name="file" multiple />

? ? ? ? <input type="button" value="上傳" οnclick="doUpload()" />

? ? </form>

</div>

編寫JS代碼如下(這里我們使用FormData對象來上傳):

function doUpload() {

? ? ? ? var formData = new FormData($("#uploadForm")[0]);

? ? ? ? $.ajax({

? ? ? ? ? ? url: '@Url.Action("FileSave")',

? ? ? ? ? ? type: 'POST',

? ? ? ? ? ? data: formData,

? ? ? ? ? ? async: false,

? ? ? ? ? ? cache: false,

? ? ? ? ? ? contentType: false,

? ? ? ? ? ? processData: false,

? ? ? ? ? ? success: function (returndata) {

? ? ? ? ? ? ? ? alert(returndata);

? ? ? ? ? ? },

? ? ? ? ? ? error: function (returndata) {

? ? ? ? ? ? ? ? alert(returndata);

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? }

后臺代碼不做任何修改.我們會發現.直接在List<IFormFile> files中是無法獲取到文件的.

通過調試,我們可以發現,文件是上傳成功的,但是放在了Request.Form.Files當中.

所以修改后臺代碼如下:

public async Task<IActionResult> FileSave()

{

? ? ? ? ? ? var date = Request;

? ? ? ? ? ? var files = Request.Form.Files;

? ? ? ? ? ? long size = files.Sum(f => f.Length);

? ? ? ? ? ? string webRootPath = _hostingEnvironment.WebRootPath;

? ? ? ? ? ? string contentRootPath = _hostingEnvironment.ContentRootPath;

? ? ? ? ? ? foreach (var formFile in files)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (formFile.Length > 0)

? ? ? ? ? ? ? ? {


? ? ? ? ? ? ? ? ? ? string fileExt = GetFileExt(formFile.FileName); //文件擴展名,不含“.”

? ? ? ? ? ? ? ? ? ? long fileSize = formFile.Length; //獲得文件大小,以字節為單位

? ? ? ? ? ? ? ? ? ? string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //隨機生成新的文件名

? ? ? ? ? ? ? ? ? ? var filePath = webRootPath +"/upload/" + newFileName;

? ? ? ? ? ? ? ? ? ? using (var stream = new FileStream(filePath, FileMode.Create))

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? await formFile.CopyToAsync(stream);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }


? ? ? ? ? ? return Ok(new { count = files.Count, size });

?}

改為直接從Request.Form.Files中獲取文件集合.~

?

3.使用webUploader上傳文件

很久之前..呃..封裝過一個webUploader的JS.如下:

對百度WebUploader開源上傳控件的二次封裝,精簡前端代碼(兩句代碼搞定上傳)

對百度WebUploader的二次封裝,精簡前端代碼之圖片預覽上傳(兩句代碼搞定上傳)

..我們也用封裝好的JS來試試.HTML和JS代碼如下,后臺代碼不需要修改,還是直接從Request.Form.Files獲取即可:

<div id="upfliediv"></div>

$(function () {



? ? ? ? //實例化文件上傳


? ? ? ? $("#upfliediv").powerWebUpload({

? ? ? ? ? ? ? ? auto: true, fileNumLimit: 1

? ? ? ? ? ? });

? ? ? ? $("#upfliediv").CleanUpload();


? ? })

上傳效果如圖:

?

4.文件下載.

上傳了文件,我們當然需要下載.

直接通過URL+地址下載是一種極其不安全的方式.這里我們采用返回流的形式來下載.

后臺代碼如下:

/// <summary>

? ? ? ? /// 文件流的方式輸出 ? ? ? ?/// </summary>

? ? ? ? /// <returns></returns>

? ? ? ? public IActionResult DownLoad(string file)

? ? ? ? {

? ? ? ? ? ? var addrUrl = file;

? ? ? ? ? ? var stream = System.IO.File.OpenRead(addrUrl);

? ? ? ? ? ? string fileExt = GetFileExt(file);

? ? ? ? ? ? //獲取文件的ContentType

? ? ? ? ? ? var provider = new FileExtensionContentTypeProvider();

? ? ? ? ? ? var memi = provider.Mappings[fileExt];

? ? ? ? ? ? return File(stream, memi, Path.GetFileName(addrUrl));

? ? ? ? }

這里值得注意的是,以前我們想獲取ContentType直接使用MimeMapping.GetMimeMapping(file);就好了.

但是這個類是在System.Web下的,core已經拋棄了現有的System.Web.

所以在ASP.NET Core中我們需要通過新的類FileExtensionContentTypeProvider來獲取文件的ContentType

編寫HTML+JS代碼如下(PS:因為是demo,所以寫的比較簡陋):

<div><input type="text" id="filename" /><button onclick="downLoad()">下載</button></div> function downLoad() { var filename = $("#filename").val();window.location.href = "@Url.Action("DownLoad")?file=" + filename;}

效果如圖:

原文地址:?https://www.cnblogs.com/GuZhenYin/p/8194726.html?


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的ASP.NET Core文件上传与下载(多种上传方式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 懂色av蜜臀av粉嫩av喷吹 | 日韩欧美毛片 | 一级特黄a | 深夜福利一区二区 | 秋霞7777鲁丝伊人久久影院 | 黄色av播放 | 国产伦精品一区二区三区视频免费 | 亚洲激情短视频 | 日批视频在线播放 | av免费在线观看不卡 | 久久久无码精品亚洲国产 | 少妇喷白浆 | 日本a级片在线播放 | 精品在线视频免费观看 | 人人看人人艹 | 中文字幕少妇在线三级hd | 男操女视频在线观看 | 亚州av一区| 精品欧美激情精品一区 | 国产91丝袜在线观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 狠狠干av| 日韩精品xxxx| 亚洲国产一区二区三区在线观看 | 人妻少妇偷人精品无码 | 乌克兰av在线 | 成人在线免费观看网址 | 美日韩黄色片 | 上海贵妇尝试黑人洋吊 | 俄罗斯乱妇 | 国内毛片毛片毛片毛片毛片 | 久久福利片 | 男人的天堂在线视频 | 日本护士体内she精2xxx | 少妇3p视频 | 国产毛片久久久久 | 韩国一区二区三区四区 | 久久精品在线观看 | 伊人婷婷色| 国产一级片免费观看 | 色偷偷久久 | 中文字幕在线不卡视频 | 成人看片黄a免费看视频 | 亚洲一二三四区 | 欧美亚洲网站 | 人妻体内射精一区二区三区 | 小柔的裸露日记h | 日本天堂一区 | 中文字幕亚洲无线码在线一区 | 久久91亚洲人成电影网站 | 亚洲毛片在线观看 | 麻豆一区二区三区在线观看 | 免费看欧美黄色片 | 国产一区二区三区18 | jzzijzzij亚洲成熟少妇在线播放 狠狠躁日日躁夜夜躁2022麻豆 | 成人av免费在线 | 爱露出| 玖玖热在线视频 | 精品黑人一区二区三区 | 日本中文字幕在线免费观看 | 欧美不卡二区 | 精品乱码一区内射人妻无码 | 国产在线不卡 | 俄罗斯厕所偷拍 | 福利视频三区 | 免费日本特黄 | 亚洲福利| 性欧美丰满熟妇xxxx性久久久 | 狠狠插狠狠干 | 免费小视频在线观看 | 久久久青青草 | 熟女视频一区 | 尤物毛片| 张津瑜国内精品www在线 | 欧美最猛黑人xxxx | 懂色一区二区二区av免费观看 | 色妞网站 | chinese hd xxxx tube麻豆tv | 寂寞d奶大胸少妇 | 国产乱妇4p交换乱免费视频 | 久久99国产精品久久99果冻传媒 | 国产一区二区在 | jizz中国女人 | 国产美女一级片 | 国产成人综合在线视频 | 一区视频在线免费观看 | 黑人巨大猛交丰满少妇 | 国产精品自拍一区 | 实拍女处破www免费看 | 免费激情片 | 男人天堂网址 | 91人人澡人人爽人人精品 | 美女视频久久久 | 青青草在线视频免费观看 | 久久综合国产精品 | 夜夜嗨av一区二区三区 | 亚洲欧美日韩国产 | 中文字幕在线网址 | 香蕉蜜桃视频 |