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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

.NET Core 文件上传、下载、文件流转换

發(fā)布時間:2024/3/26 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 文件上传、下载、文件流转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

通過Webapi下載文件:

//前端請求預覽或下載文件(微信小程序也一樣)[HttpGet]public async Task<IActionResult> DownloadYFPreview([FromQuery] string openId, string dbName, string orderName, string id){if (openId == null || dbName == null || orderName == null)return UnprocessableEntity();//從sql server數(shù)據(jù)庫獲取下載的文件二進制內(nèi)容PreviewInfoModel infoModel = await _orderApproval.DownloadPreview(openId, dbName, orderName, id);if (infoModel == null)return null;string lastinfo = infoModel.name.Split('.')[1];if (lastinfo.Equals("docx"))lastinfo = "doc";else if (lastinfo.Equals("pptx"))lastinfo = "ppt";else if (lastinfo.Equals("xlsx"))lastinfo = "xls";//獲取文件的contentType(通過后綴名從json文件中匹配contentType)var item = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build().GetSection("contenttype").GetSection(lastinfo).Value;//下載文件return File(infoModel.buffer, item, infoModel.name);}

前端附件預覽:

//附件預覽 preview: function (id) {var _this = this;var path = _this.prefix + "/FindOne/" + id;hzyAdmin.httpPost(path, {}, function (r) {if (r.code !== 1) return;//文件流var imageBytes = r.data.model.cim002;//contentTypevar fileType = r.data.model.cim004;var myFile = _this.createFile(imageBytes, fileType);var urll = window.URL.createObjectURL(myFile);window.open(urll);}); }, //轉換文件流 createFile: function (urlData, fileType) {var bytes = window.atob(urlData),n = bytes.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bytes.charCodeAt(n);}return new Blob([u8arr], { type: fileType }); }

前端elementUi上傳附件:

<div class="col-sm-12"><el-upload class="upload-demo"@*上傳地址*@action="/Admin/rgwimg/uploadinfo"@*其它請求參數(shù)*@:data={id:this.idx,name:this.name}:on-preview="handlePreview":on-remove="handleRemove":before-remove="beforeRemove"multiple:on-exceed="handleExceed":on-success="success"@*選擇之后立即上傳*@:auto-upload="true":show-file-list="false"><el-button size="large" type="primary">點擊上傳</el-button></el-upload> </div>

后端接收上傳附件保存到sql server中:
?

/// <summary>/// 上傳附件/// </summary>/// <param name="file"></param>/// <param name="id"></param>/// <param name="name"></param>/// <returns></returns>[HttpPost("uploadinfo")][DisableRequestSizeLimit]public async Task<ApiResult> UploadInfo(IFormFile file,[FromForm] string id,[FromForm] string name){return this.ResultOk(await this.DefaultService.SaveFormAsync(file, id, name));}/// <summary>/// 保存數(shù)據(jù)/// </summary>/// <param name="file"></param>/// <param name="id"></param>/// <param name="name"></param>/// <returns></returns>public async Task<rgwimg> SaveFormAsync(IFormFile file,string id,string name){BinaryReader r = new BinaryReader(file.OpenReadStream());r.BaseStream.Seek(0, SeekOrigin.Begin); //將文件指針設置到文件開rgwimg rgwimg = new rgwimg{cim001 = Guid.Parse(id),cim003 = file.FileName,cim004 = file.ContentType,cim005 = name,//文件流轉換為byte[],保存到數(shù)據(jù)庫中,sqlserver 字段類別為imagecim002 = r.ReadBytes((int)r.BaseStream.Length)};return await this.Repository.InsertOrUpdateAsync(rgwimg);}

微信小程序附件預覽:

//前端代碼 <view class="rightopera" data-idx="{{item.docId}}" bindtap="download" >//預覽代碼download(e){const id = e.currentTarget.dataset.idx;let tokens=app.globalData.token;wx.downloadFile({url: 'https://192.168.0.127:44349/api/OrderApproval/DownloadYFPreview?dbName='+this.data.dbname+'&orderName='+this.data.ordername+'&openId='+app.globalData.openid+'&id='+id,header:{"Authorization": 'Bearer ' +tokens},success (res) {//只要服務器有響應數(shù)據(jù),就會把響應內(nèi)容寫入文件并進入 success 回調(diào),業(yè)務需要自行判斷是否下載到了想要的內(nèi)容if (res.statusCode === 200) {var filePath=res.tempFilePath;console.log(filePath);var reg = RegExp(/.png/);if(filePath.match(reg)){var img=[];img.push(filePath);wx.previewImage({current: img[0], //當前預覽的圖片urls: img //所有要預覽的圖片})}else{wx.openDocument({filePath: filePath,success: function (res) {console.log('打開文檔成功')}})}}}})}

小程序前端附件上傳:

//前端提交布局代碼 <view class="bottomBtn" bindtap="submitForm">提交</view> //附件提交代碼submitForm(e) {if (this.data.details == "") {wx.showToast({title: "請輸入評論",icon: "loading",duration: 1000});return;}let time = new Date().getTime();let tokens = app.globalData.token;this.uploadFile(time, tokens).then(res => {if (res.statusCode == "401") {request.getLoginInfo(app.globalData.openid).then(res => {tokens = res.data.token;this.uploadFile(time, tokens).then(res => {wx.showToast({title: "網(wǎng)絡異常,請稍后重試",icon: "loading",duration: 1000});});});} else if (res.statusCode == "200") {this.backprevious();} else {wx.showToast({title: "網(wǎng)絡異常,請稍后重試",icon: "loading",duration: 1000});}});},uploadFile(time, tokens) {var result = true;var length = this.data.images.length;return new Promise((resolve, reject) => {for (let i = 0; i < length; i++) {if (!result) break;wx.uploadFile({url: "https://www.baidu.com/api/OrderApproval/UploadImg",filePath: this.data.images[i],name: "file",header: {"Content-Type": "multipart/form-data;application/json;",Authorization: "Bearer " + tokens},formData: {orderid: this.data.orderid,openid: app.globalData.openid,content: this.data.details,times: time},success: function(res) {if (res.statusCode == "401") {result = false;resolve(res);}if (i == length - 1 && res.statusCode == "200") {resolve(res);}},fail: function(err) {result = false;reject(err);},complete: function(res) {wx.showToast({title: "上傳" + i + " code:" + res.statusCode+" errMsg:"+res.errMsg,icon: "loading",duration: 1000});}});}});}

后端接收附件保存到服務器指定文件夾:

/// <summary>/// 上傳圖片,通過Form表單提交/// </summary>/// <returns></returns>[HttpPost]//[DisableRequestSizeLimit] //不限制請求頭model的大小//[RequestSizeLimit(100_000_000)] //請求大小值為100,000,000 字節(jié)public async Task<IActionResult> UploadImg(){commentModel commentModel = new commentModel();if (Request.Form.TryGetValue("orderid", out StringValues orderid))commentModel.orderid = orderid.ToString();if (Request.Form.TryGetValue("openid", out StringValues openid))commentModel.openid = openid.ToString(); if (Request.Form.TryGetValue("content", out StringValues content))commentModel.content = content.ToString();if (Request.Form.TryGetValue("times", out StringValues times))commentModel.times = times.ToString();var sx = Request.Form.Files["file"];var now = DateTime.Now;var pathdate = now.ToString("yyyy") + now.ToString("MM") + now.ToString("dd");//文件存儲路徑var filePath = string.Format("/Uploads/{0}/{1}/{2}/", now.ToString("yyyy"), now.ToString("MM"), now.ToString("dd"));//獲取當前web目錄var webRootPath = Directory.GetCurrentDirectory();if (!Directory.Exists(webRootPath + filePath)){Directory.CreateDirectory(webRootPath + filePath);}try{var fileExtension = Path.GetExtension(sx.FileName);var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得時間字符串var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位隨機數(shù)var saveName = strDateTime + strRan + fileExtension;string path = webRootPath + filePath + pathdate + saveName;using (FileStream fs = System.IO.File.Create(path)){sx.CopyTo(fs);fs.Flush();}commentModel.picAddress = pathdate + saveName;bool result = await _orderApproval.SavePics(commentModel);if (!result)return BadRequest("保存失敗,請稍后重試");return Ok();}catch (Exception ex){return BadRequest();}}

流轉換:

//byte[]直接轉換內(nèi)存流,供下載使用 byte[] buffer=new byte[1000]; MemoryStream ms = new MemoryStream(buffer); ms.Write(buffer, 0, buffer.Length); ms.Position = 0; ms.Seek(0, SeekOrigin.Begin); return new FileContentResult(buffer, "image/png"); //FileStream轉為MemoryStream,再轉為byte[] byte[] StreamToFile(FileStream fileStream, MemoryStream memoryStream){byte[] files = new byte[0];byte[] fileBytes = new byte[fileStream.Length];fileStream.Read(fileBytes, 0, (int)fileStream.Length);memoryStream.Write(fileBytes, 0, (int)fileStream.Length);files= memoryStream.ToArray();fileStream.Close();memoryStream.Close();return files;}

讀取網(wǎng)絡共享文件:

參考:https://www.cjavapy.com/article/395/ byte[] files=new byte[0]; var folder = new SmbFile("smb://Administrator:123@192.168.0.84/YFATTACH/0010000132.001"); if (!folder.Exists())return files; //獲取可讀的流 var readStream = folder.GetInputStream(); //獲取 bytes. ((Stream)readStream).CopyTo(memStream);//Dispose可讀的流。 readStream.Dispose(); files= memoryStream.ToArray(); return files;

把網(wǎng)絡共享文件讀到本地:

byte[] ReadFile(string path,string fileId,string fileName){byte[] files = new byte[0];string filepath = Directory.GetCurrentDirectory() + "/Files/";string oldFileName = $"{filepath}/{fileId}";string newFileName = $"{filepath}/{fileName}";FileStream fileStream = null;//判斷文件是否存在bool isExists = File.Exists($"{filepath}/{fileName}");if (isExists)//若存在,則讀取文件到內(nèi)存fileStream = new FileStream($"{filepath}/{fileName}", FileMode.Open);//創(chuàng)建讀取緩存var memStream = new MemoryStream();if (!isExists){ //var folder = new SmbFile("smb://Administrator:123@192.168.0.84/YFATTACH/0010000132.001");var folder = new SmbFile($"smb://{path}");if (!folder.Exists())return files;//獲取可讀的流。var readStream = folder.GetInputStream();//獲取 bytes.((Stream)readStream).CopyTo(memStream);//Dispose可讀的流。readStream.Dispose();if (!Directory.Exists(filepath)){Directory.CreateDirectory(filepath);}string filesName = filepath + folder.GetName();using (FileStream fls = System.IO.File.Create(filesName)){//內(nèi)存流轉為文件流,并寫入磁盤fls.Write(memStream.ToArray(), 0, memStream.ToArray().Length);fls.Close();}//重命名文件名及擴張名File.Copy(oldFileName, newFileName);fileStream = new FileStream($"{filepath}/{fileName}", FileMode.Open);if (fileStream.Length > 0)files= StreamToFile(fileStream, memStream);}elsefiles= StreamToFile(fileStream, memStream);//刪除指定文件File.Delete(oldFileName);File.Delete(newFileName);return files;}byte[] StreamToFile(FileStream fileStream, MemoryStream memoryStream){byte[] files = new byte[0];byte[] fileBytes = new byte[fileStream.Length];fileStream.Read(fileBytes, 0, (int)fileStream.Length);memoryStream.Write(fileBytes, 0, (int)fileStream.Length);files= memoryStream.ToArray();fileStream.Close();memoryStream.Close();return files;}

謝謝打賞:

? ?

總結

以上是生活随笔為你收集整理的.NET Core 文件上传、下载、文件流转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲人成网址 | 天堂a√在线 | 日韩一区二区三区精品 | 开心六月婷婷 | 国产99页| 亚洲免费av网 | 黄色网址中文字幕 | 午夜久久久久久久 | 日韩在线第一 | 亚洲AV无码成人精品国产一区 | 亚洲性欧美色 | 亚洲国产91 | 国产精品二区视频 | 爱爱视频网址 | 亚洲激情欧美色图 | 久草视频免费看 | 国产强被迫伦姧在线观看无码 | 五月激情婷婷丁香 | 欧美怡红院一区二区三区 | 91精品国产99久久久久久红楼 | 五月网| 欧美r级在线观看 | 在线观看中文字幕第一页 | 黄色片一区二区三区 | 91在线 | 一级黄色欧美 | 亚洲成人久久久 | 日韩毛片在线免费观看 | 亚洲m码 欧洲s码sss222 | 亚洲一区欧洲二区 | 97精品超碰一区二区三区 | 国产精品美女自拍视频 | 国产区精品区 | 91麻豆精品国产 | 日韩1区2区3区| 激情婷婷久久 | 天堂av网站 | 一区二区三区观看 | 欧美一区二区最爽乱淫视频免费看 | 又黄又爽的视频在线观看 | 雷电将军和丘丘人繁衍后代视频 | 狠狠艹视频 | 一区二区视频在线播放 | 黄瓜视频在线观看 | 在线91观看| 成人日韩精品 | 综合久久精品 | 男男一级淫片免费播放 | 中文字幕被公侵犯的漂亮人妻 | 高h全肉污文play带道具 | 亚洲国产一二三区 | 99精品福利 | 国产毛片一区 | 欧美亚洲视频在线观看 | 涩涩视频免费看 | 国产精品suv一区 | 超碰人人在线 | 青娱乐在线视频观看 | 亚洲精品免费在线观看视频 | 激情亚洲色图 | 日本久久成人 | 成年人网站免费在线观看 | 欧美a免费 | 美女的诞生免费观看在线高清 | 一区精品在线观看 | 国产一级免费大片 | 久爱视频在线观看 | 无码人妻熟妇av又粗又大 | 亚洲v欧美v| 黄色三级在线 | 五月天婷婷社区 | www.18av | 综合久久久久综合 | 午夜影院免费体验区 | 97人妻一区二区精品视频 | 欧美日韩综合一区 | 国产三级91| 中文字幕一区二区久久人妻网站 | 欧美日韩在线视频一区二区三区 | 亚洲AV无码国产精品 | 91操人视频 | 91久久人澡人人添人人爽欧美 | 亚洲天堂爱爱 | 自拍偷拍第3页 | 国产一区二区三区麻豆 | 国产偷人 | 黄色片18 | 日韩一级免费观看 | 亚洲综合第一页 | 亲嘴扒胸摸屁股免费视频日本网站 | 日韩高清免费av | 久久久久久久久免费看无码 | 人妻一区二区三 | 精品日韩制服无码久久久久久 | 成人爱爱视频 | 久久久久人妻一区二区三区 | 日本视频在线免费观看 | 黄色.com| 欧美做爰性生交视频 |