• 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 > 0)
                    {
                        return list[0];
                    }
                    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 = 0; 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等会保存

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

  • 相关阅读:
    进程的挂起及恢复
    移植 iconv
    产生不重复随机数
    Javascript数据验证类
    简单设置让EasyUI显示中文,日期选择框格式为yyyyMMdd格式
    NPOI开源组件(操作Execl)创建Workbook和Sheet,创建单元格,设置行列样式等
    PL/SQL中流程控制语句 和Oracle临时表
    c#字符串中包含的运算符按正常计算 例如按四则运算等,类似公式计算,很好很强大
    判断一个数组中的值是否包含在另一个数组中
    利用NPOI开源的读写Excel、WORD等微软OLE2组件读写execl,控制样式或单元格
  • 原文地址:https://www.cnblogs.com/sas1231/p/10476757.html
Copyright © 2020-2023  润新知