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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

这是Blazor上传文件的最佳方式吗?

發布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这是Blazor上传文件的最佳方式吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Blazor不得不說真是好東西,極大的提升了開發效率,很多的頁面交互功能基本上只需要寫很少的代碼就能實現了,而且還是無js實現,你也絕對沒有想到過,Blazor實現文件上傳是有多么簡單!

先說結論:Blazor實現帶進度顯示的文件上傳真的很簡單!效果看圖:

實現這么一個小功能,僅僅只花了不到50行的代碼就實現了,接下來就給大家分享下案例實現吧。

首先引入Tewr.Blazor.FileReader包,這個包能夠提供文件上傳的流式讀取,這樣便可以實現在服務端對上傳文件進行一邊上傳一遍寫文件的操作。

配置依賴注入(站長注:這是Blazor Server模式,wasm方式請查看文末倉庫文檔說明):

services.AddFileReaderService();

接下來我們先進行頁面布局,很簡單,再聲明兩個變量用于顯示進度和顯示圖片:

<input?type="file"/><button>上傳文件</button> <div>@if?(!string.IsNullOrEmpty(_src)){<img?src="@_src"?width="600px"?/>}else{<p>@progress</p>} </div>

然后在組件中注入IFileReaderService服務

@using?Tewr.Blazor.FileReader @inject?IFileReaderService?fileReaderService;

為了讓文件框能夠和C#代碼進行交互,所以需要將它通過ElementReference引用起來:

<input?@ref=inputTypeFileElement?type="file"?/><button>上傳文件</button> <div>@if?(!string.IsNullOrEmpty(_src)){<img?src="@_src"?width="600px"?/>}else{<p>@progress</p>} </div> @code?{private?ElementReference?inputTypeFileElement;private?string?_src;private?string?progress; }

給按鈕綁定事件,按鈕觸發后通過fileReaderService進行文件流的讀取,接下來便是常規的二進制數據copy操作,可以拿到文件的傳輸進度,計算之后便能顯示到頁面中

<button?@onclick=ReadFile>上傳文件</button>public?async?Task?ReadFile() {_src?=?"";foreach?(var?file?in?await?fileReaderService.CreateReference(inputTypeFileElement).EnumerateFilesAsync()){await?using?var?fileStream?=?await?file.OpenReadAsync();var?buffer?=?new?byte[2048];var?finalBuffer?=?new?byte[fileStream.Length];int?count;int?totalCount?=?0;while?((count?=?await?fileStream.ReadAsync(buffer,?0,?buffer.Length))?!=?0){Buffer.BlockCopy(buffer,?0,?finalBuffer,?totalCount,?count);totalCount?+=?count;progress?=?"文件上傳中?"?+?(int)(totalCount?*?100.0?/?fileStream.Length)?+?"%";StateHasChanged();}_src?=?$"data:image/jpg;base64,{Convert.ToBase64String(finalBuffer)}";progress?=?"";StateHasChanged();} }

完整代碼如下:

@page?"/counter" @using?Tewr.Blazor.FileReader @inject?IFileReaderService?fileReaderService;<input?@ref=inputTypeFileElement?type="file"?/> <button?@onclick=ReadFile>上傳文件</button> <div>@if?(!string.IsNullOrEmpty(_src)){<img?src="@_src"?width="600px"?/>}else{<p>@progress</p>} </div>@code?{private?ElementReference?inputTypeFileElement;private?string?_src;private?string?progress;public?async?Task?ReadFile(){_src?=?"";foreach?(var?file?in?await?fileReaderService.CreateReference(inputTypeFileElement).EnumerateFilesAsync()){await?using?var?fileStream?=?await?file.OpenReadAsync();var?buffer?=?new?byte[2048];var?finalBuffer?=?new?byte[fileStream.Length];int?count;int?totalCount?=?0;while?((count?=?await?fileStream.ReadAsync(buffer,?0,?buffer.Length))?!=?0){Buffer.BlockCopy(buffer,?0,?finalBuffer,?totalCount,?count);totalCount?+=?count;progress?=?"文件上傳中?"?+?(int)(totalCount?*?100.0?/?fileStream.Length)?+?"%";StateHasChanged();}_src?=?$"data:image/jpg;base64,{Convert.ToBase64String(finalBuffer)}";progress?=?"";StateHasChanged();}} }

站長插播:

文章首圖演示的是一張不到1MB的圖片,因為Tewr.Blazor.FileReader這個包提供文件上傳的流式讀取,上傳大文件也是可以的,下面這是上傳一個34.2MB的ZIP壓縮包,Blazor服務端模式:

demo做的一般,可能gif看不出啥,只是為了證明這個包確實不錯,要實現大文件上傳,可把上面單包讀取大小改大一點,比如:512KB:

var?buffer?=?new?byte[1024*512];

如果看下方微軟Blazor文件上傳文檔,把單包大小改成大于20KB,頁面可能會卡一下,然后頁面自動刷新就把上傳操作給重置了,而使用這個包確沒這個問題,這個包很nice。

OK,本文完。

參考

  • Blazor實現文件上傳帶進度顯示案例分享[1]

  • https://github.com/Tewr/BlazorFileReader[2]

  • https://docs.microsoft.com/zh-cn/aspnet/core/blazor/file-uploads?view=aspnetcore-6.0&pivots=server[3]

參考資料

[1]

Blazor實現文件上傳帶進度顯示案例分享: https://masuit.com/1676

[2]

https://github.com/Tewr/BlazorFileReader: https://github.com/Tewr/BlazorFileReader

[3]

https://docs.microsoft.com/zh-cn/aspnet/core/blazor/file-uploads?view=aspnetcore-6.0&pivots=server: https://docs.microsoft.com/zh-cn/aspnet/core/blazor/file-uploads?view=aspnetcore-6.0&pivots=server

總結

以上是生活随笔為你收集整理的这是Blazor上传文件的最佳方式吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线观看视频一区二区 | 黄色日韩在线 | 欧美日韩视频无码一区二区三 | 97成人资源站 | 给我免费观看片在线电影的 | 黑人巨大av | 国产精品怡红院 | 成人性生活毛片 | 国产精品成人在线观看 | 亚洲伦理精品 | 五月婷综合网 | 欧美精品性生活 | 一区亚洲 | 日韩不卡免费视频 | 午夜色网站 | 国产午夜在线一区二区三区 | 久久黄色视 | av在线片 | 日本黄色小片 | 2019日韩中文字幕mv | 第一av在线| 日韩av自拍偷拍 | www,久久久| 日韩第1页| 精品日韩欧美 | 久久天天干 | 91九色蝌蚪 | 日本黄色片网址 | 亚洲天天视频 | 国产精品毛片一区 | 1024在线视频| 影音先锋中文字幕一区二区 | 97超碰资源总站 | www.天天操| 女人又爽又黄免费女仆 | 亚洲欧洲日产av | 总裁憋尿呻吟双腿大开憋尿 | 亚洲精品在线播放视频 | 亚洲天堂久久 | 国产精品视频免费看 | 先锋资源av| 国产激情一区二区三区四区 | 九九热国产 | 久久深夜福利 | 欧美日韩黑人 | 亚洲黄色片 | 天天干天天插天天射 | 中文字幕一区电影 | 丝袜在线视频 | 岳奶大又白下面又肥又黑水多 | 韩国久久久 | 国产专区在线 | 国产乱国产乱300精品 | 国产亚洲精品成人av在线 | 小优视频污 | 中文在线天堂网 | 亚州一级 | av电影在线观看不卡 | 99热网站| 中日韩精品视频 | brazzers猛女系列 | 激情小说专区 | 一区久久久| a级黄色片免费看 | 久久99精品久久只有精品 | 椎名由奈av一区二区三区 | 久久精品中文字幕 | 日本在线中文字幕专区 | 超碰97在线播放 | 午夜影院免费 | 中文字幕av专区dvd | 制服 丝袜 激情 欧洲 亚洲 | 亚洲va欧美va国产综合久久 | 久久乐视频| 麻豆免费视频网站 | 欧美日一区二区三区 | 人妻视频一区 | 国产妇女乱一性一交 | 深爱五月激情网 | 深夜成人福利视频 | 日韩乱码人妻无码中文字幕 | 午夜精品亚洲 | 欧美高清一区二区三区四区 | 午夜写真片福利电影网 | 国产精品成人免费看片 | 成人免费在线视频 | 亚洲精品高清在线观看 | 黄色同人网站 | 中文字幕在线免费看线人 | 国产又粗又猛又爽又黄又 | 天堂中文资源在线观看 | 国产又粗又猛又色又 | 毛片大全在线观看 | 久久久久久久久久久久国产精品 | 久久久久久无码午夜精品直播 | 久久久久成人精品无码中文字幕 | 成人在线黄色 | 成人一级大片 | 性欧美videos高清hd4k |