/// <summary> /// 获取文件信息 /// </summary> /// <param name="token">登录Token</param> /// <returns></returns> [HttpGet] public HttpResponseMessage fileDownload(String token, String url, Boolean bTemp = false) { Object result = null; String tempPath = String.Empty; String temPath1 = String.Empty; try { LoginUser loginUser = GetCurrentLoginUser(token); String file = HttpContext.Current.Request.MapPath(url); tempPath = HttpContext.Current.Request.MapPath(String.Format("/upload/Temp/{0}/", loginUser.Uid)); temPath1 = String.Format("{0}/Template/", tempPath); FileInfo fileInfo = new FileInfo(file); if (!Directory.Exists(temPath1)) { Directory.CreateDirectory(temPath1); } fileInfo.CopyTo(temPath1 + fileInfo.Name); using (FileStream filestream = new FileStream(temPath1 + fileInfo.Name, FileMode.Open)) { byte[] bt = new byte[filestream.Length]; //调用read读取方法 filestream.Read(bt, 0, bt.Length); var base64Str = Convert.ToBase64String(bt); result = new { name = Path.GetFileName(file), dataStr = base64Str }; } String[] strs = url.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); String fileName = strs[strs.Length - 1]; String msg = String.Empty; if (bTemp) { msg = String.Format("用户【{0}】下载了模板文件【{1}】", loginUser.User.FullName, fileName); } else { String pjName = strs[1] + "-" + strs[2]; String moduleName = strs.Length > 3 ? strs[strs.Length - 3] : ""; msg = String.Format("用户【{0}】下载了项目【{1}】的【{2}】文件【{3}】", loginUser.User.FullName, pjName, moduleName, fileName); } LogHelper.LogOperate(msg, Constant.OPEARTE_LOG_INFO, loginUser); } catch (Exception ex) { AppLog.Error(ex); return JsonResultModel(Result_Error, ex.Message, null); } finally { if (!String.IsNullOrEmpty(temPath1)) { // 删除临时文件夹 Directory.Delete(temPath1, true); } } return JsonResultModel(Result_Success_Code, Result_Success_MSG, result); }
// 下载文件 export function fileDownload(params) { return request({ url: '/Common/fileDownload', method: 'get', params }) }
downLoadFile(row) { var ext = extName(row.name).toLocaleLowerCase() if (ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'jfif') { this.dialogImageUrl = row.webUrl this.imgViewDialogVisible = true } else { var param = { token: getToken(), url: row.url } fileDownload(param).then(res => { if (res.code === 20000) { downloadFile(res.data.name, res.data.dataStr) } }) } }
/* * 下载文件 */ export function downloadFile(fileName, content) { const aLink = document.createElement('a') const blob = base64ToBlob(content) // new Blob([content]); const evt = document.createEvent('HTMLEvents') evt.initEvent('click', true, true)// initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为 aLink.download = fileName aLink.href = URL.createObjectURL(blob) // aLink.dispatchEvent(evt); aLink.click() } // base64转blob export function base64ToBlob(code) { const parts = code.split(';base64,') const contentType = parts[0].split(':')[1] const raw = window.atob(parts[0]) const rawLength = raw.length const uInt8Array = new Uint8Array(rawLength) for (let i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i) } return new Blob([uInt8Array], { type: contentType }) }