• 在网页上下载文件


    原链接:https://www.cnblogs.com/wangdetian168/articles/1216690.html

    如图:下面代码是文件较小时的代码,用着没问题,但是文件超过了1G后发现下载出错了,找到了上面链接的下载大文件的代码,修改过后竟然能用。

     

     

     源码:

    //FileStreamResult:小文件下载时返回的数据类型
            public void DownloadBackup(string id)
            {
                //try
                //{
                //    var data = this.CreateService<IDbBackupAppService>().GetOne(id);
                //    var path = Server.MapPath("~/Resource/DbBackup/" + data.F_FileName);
                //    var name = Path.GetFileName(path);
                //    //文件过大(> 1G)时下面代码抛出异常:算术运算中发生溢出或下溢
                //    return File(new FileStream(path, FileMode.Open), "application/octet-stream", Server.UrlEncode(name));
                //}
                //catch (Exception ex)
                //{
                //    Sys_Log entity = this.InsertLog(LogType.Exception, "系统管理/数据备份", "下载备份文件异常,异常信息[" + ex.Message + "]");
                //    this.CreateService<ILogAppService>().insertLog(entity);
                //    throw new Exception(ex.ToString());
                //}
                Debug.WriteLine("开始时间:" + DateTime.Now);
                //文件过大(>1G)处理
                var data = this.CreateService<IDbBackupAppService>().GetOne(id);
                var filepath = Server.MapPath("~/Resource/DbBackup/" + data.F_FileName);
                Stream iStream = null;
                byte[] buffer = new Byte[102400];
                int length;
                //总共要读取的字节长度
                long dataToRead;
                string filename = Path.GetFileName(filepath);
                try
                {
                    //打开文件
                    iStream = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read);
                    dataToRead = iStream.Length;
    
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
    
                    //读取文件
                    while (dataToRead > 0)
                    {
                        //验证客户端是否链接
                        if (Response.IsClientConnected)
                        {
                            //读取数据到buffer里
                            length = iStream.Read(buffer, 0, 102400);
                            //把buffer中的数据写入到输出流
                            Response.OutputStream.Write(buffer, 0, length);
                            //刷新
                            Response.Flush();
                            buffer = new Byte[102400];
                            dataToRead = dataToRead - length;
                        }
                        else
                        {
                            //防止无限循环
                            dataToRead = -1;
                        }
                    }
                }
                catch (Exception ex)
                {
                    //捕捉异常信息
                    Response.Write("Error : " + ex.Message);
                    Sys_Log entity = this.InsertLog(LogType.Exception, "系统管理/数据备份", "下载备份文件异常,异常信息[" + ex.Message + "]");
                    this.CreateService<ILogAppService>().insertLog(entity);
                    //throw new Exception(ex.ToString());
                }
                finally
                {
                    if (iStream != null)
                    {
                        //关闭文件
                        iStream.Close();
                    }
                }
                Debug.WriteLine("结束时间:" + DateTime.Now);
            }
    View Code
  • 相关阅读:
    qt一直编译
    JavaWeb-国际化之Locale
    JavaWeb-文件下载
    JavaWeb-文件上传案例
    JavaWeb-使用fileload组件
    JavaWeb—文件上传基础
    JavaWeb-其他Listener监听器(3)
    JavaWeb-其他Listener监听器(2)
    JavaWeb-其他的servlet监听器(1)
    JavaWeb——通过Listener理解域对象生命周期
  • 原文地址:https://www.cnblogs.com/luna-hehe/p/13932955.html
Copyright © 2020-2023  润新知