/// <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 })
}