微信下载文件并打开
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 | downFile(e) { const that = this ; const { eindex, ext } = $data(e) const apiUrl = this .$getApiUrl(); var url = apiUrl + "/WebApi/ShareFile/Download/" + eindex; wx.showModal({ title: '提示' , content: '确定要下载吗?' , success(res) { if (res.confirm) { that.downFile2(url, ext); } } }) }, downFile2(url, ext) {<br> //ext是扩展名,格式如.jpg wx.showLoading({ title: '下载中...' }); let fileNameTime = new Date().valueOf() + ext; // fileNameTime = fileNameTime + ext; let filePath = wx.env.USER_DATA_PATH + '/' + fileNameTime; //wx.downloadFile方法:下载文件资源到本地 let header = http.getHeader(); //这里有带token验证,不用的可以去掉 wx.downloadFile({ url: url, //图片地址 filePath: filePath, header: header, success: function (res) { wx.hideLoading({}); var isImg = ext.indexOf( '.png' ) >= 0 || ext.indexOf( '.jpg' ) >= 0 || ext.indexOf( '.jpeg' ) >= 0 || ext.indexOf( '.bmp' ) >= 0 || ext .indexOf( '.gif' ) >= 0; if (isImg) { //wx.saveImageToPhotosAlbum方法:保存图片到系统相册 wx.saveImageToPhotosAlbum({ filePath: res.filePath, //图片文件路径 success: function (data) { wx.hideLoading(); //隐藏 loading 提示框 wx.showToast({ title: '下载完成' , icon: 'success' , duration: 2000 }); }, // 接口调用失败的回调函数 fail: function (err) { if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response" ) { wx.showModal({ title: '提示' , content: '需要您授权保存相册' , modalType: false , success: modalSuccess => { wx.openSetting({ success(settingdata) { console.log( "settingdata" , settingdata) if (settingdata.authSetting[ 'scope.writePhotosAlbum' ]) { wx.showModal({ title: '提示' , content: '获取权限成功,再次点击图片即可保存' , modalType: false , }) } else { wx.showModal({ title: '提示' , content: '获取权限失败,将无法保存到相册哦~' , modalType: false , }) } }, fail(failData) { console.log( "failData" , failData) }, complete(finishData) { console.log( "finishData" , finishData) } }) } }) } else { wx.showToast({ title: '保存失败:' + err.errMsg, icon: 'none' , duration: 2000 }); console.log( "err" , err.errMsg) } }, complete(res) { wx.hideLoading(); //隐藏 loading 提示框 } }) } else { wx.openDocument({ filePath: filePath, showMenu: true , //一定要配置为true,页面右上角才会有3个点,点那里可以提示保存到手机的 success: function (res) { console.log( '打开文档成功' ) } }) } }, fail: function (res) { wx.hideLoading({}); console.info(ees); } }) }, |
.net 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 | [HttpGet] public async Task<FileResult> Download( long id) { var dto = await _shareFileService.GetDtoById(id); if (dto == null ) throw Oops.Bah( "找不到该文件" ); var file = App.WebHostEnvironment.ContentRootPath + dto.FilePath; if (!FileHelper.IsFileExist(file)) throw Oops.Bah( "找不到该文件" ); var fileName = Path.GetFileName(file); //因为不知道文件是什么类型的,所以使用ContentDisposition var cd = new ContentDisposition { FileName = fileName, Inline = false }; App.HttpContext.Response.Headers.Add( "Content-Disposition" , cd.ToString()); FileStream stream = new FileStream(file, FileMode.Open); var actionresult = new FileStreamResult(stream, MediaTypeNames.Application.Octet); actionresult.FileDownloadName = fileName; return actionresult; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?