ligerUI利用a标签下载文件

时间:2023-03-09 16:42:40
ligerUI利用a标签下载文件

一、利用WriteFile实现下载,并验证文件是否存在,将指定的文件直接写入HTTP响应输出流。注意:大型文件使用此方法可能导致异常。可以使用此方法的文件大小取决于 Web 服务器的硬件配置、

(1)为a标签添加onclick事件,其中fileId为文件guid编号,fileName为文件名称

<a href="javascript:void(0);" onclick="DownEntFiles(fileId,fileName)">下载</a>

(2)下载文件完整目录的方法

//下载接收文件
//fileId:文件id
//fileName:文件名称
function DownEntFiles(fileId, fileName) {
$.ajax({
type: 'post',
url: '../HGSWXTManagement/isDeleteFiles',//后台处理的地址,用于判断该文件是否存在
data: "{fileID:'" + fileId + "'}",
async: false,
contentType: 'application/json;charset=utf-8',
success: function (data) {
if (data == "") {
$.ligerDialog.warn("该文件已删除,无法下载");
}
else {
location.href = '../InfoStatistics/DownloadFiles?filePath=' + data + '&fileName=' + fileName + '';
}
}
})
}

判断文件是否存在,如果存在,返回完整的文件路径

 #region 判断该文件是否已经删除,如果存在返回文件的完整路径
public string isDeleteFiles(string fileID)
{
try
{
//判断文件夹下是否存在这个文件
List<string> list =GetExcelFile(fileID, FunGuid);
if (list.Count > )
{
return list[];
}
else
{
return "";
}
}
catch (Exception ex)
{
return "";
}
}
#endregion

获取指定文件夹下存在的该文件的完整路径

#region 获取文件的路径以及后缀名
/// <summary>
/// 获取文件的路径以及后缀名
/// </summary>
/// <param name="fileName">文件名</param>
/// <returns></returns>
public List<string> GetExcelFile(string fileName,string FunGuid)
{
List<string> list = new List<string>();
try
{
//获取web.config中配置的文件路径
string filePath = System.Configuration.ConfigurationManager.AppSettings["UcRecv"].ToString();
//设置要获取的文件路径
//string path = HttpRuntime.AppDomainAppPath.ToString() + uploadFiles + "\\";
DirectoryInfo root = new DirectoryInfo(filePath);
FileInfo[] files = root.GetFiles();
//将文件夹下面的文件全部读取出来,并添加到list中
for (var i = ; i < files.Length; i++)
{
if (files[i].Name==fileName)
{
list.Add(files[i].FullName);//添加相对路径
}
}
return list;
}
catch (Exception ex)
{
return list;
}
}
#endregion

(3)下载文件

 #region 下载文件
/// <summary>
/// 下载文件
/// </summary>
/// <param name="filePath">文件完整路径</param>
/// <param name="fileName">文件名</param>
public void DownloadFiles(string filePath, string fileName)
{
try
{
FileInfo fi = new FileInfo(filePath);
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
//Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
//必须设置文件名称格式,否则在ie中会成乱码
Response.AddHeader("Content-Disposition", string.Format("attachment;filename*=utf-8''{0}", HttpUtility.UrlPathEncode(fileName)));
Response.AppendHeader("Content-Length", fi.Length.ToString());
Response.HeaderEncoding = System.Text.Encoding.UTF8;
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/octet-stream";
Response.WriteFile(filePath);
Response.Flush();
Response.End();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion

二、流方式下载,(这里不对文件是否存在进行验证,如果验证,可以参考上面的方法

<a href='../PhoneNum/DownloadFiles?filePath=" + filePath + "&fileName=" + fileName + "'>下载</a>
/*filePath:文件路径
fileName:文件名称
*/

后台处理方法:

#region 下载excel文件
/// <summary>
/// 下载excel文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="fileName">文件名</param>
/// <returns></returns>
public FileStreamResult DownloadFiles(string filePath, string fileName)
{ //获取文件的路径
string localPath = Server.MapPath(filePath);
return File(new FileStream(localPath, FileMode.Open), "text/plain", fileName);
}
#endregion

这样编写之后,文件能正常下载,图片,视频会直接打开,excel、txt、ppt等会保存

学习积累,如有问题,请留言,不胜感激,谢谢