代码之家  ›  专栏  ›  技术社区  ›  rai nalasa

FIle下载asp.net

  •  1
  • rai nalasa  · 技术社区  · 8 年前

    我正在尝试使用asp上的按钮下载文件。net,但按钮会给我网络表单 aspx 在我的案例中作为下载的文件 DownloadFileTest.apsx 。我需要下载正确的文件。这可能有助于我的解决方案资源管理器中上载的文件也不会显示。但如果我在项目文件夹中访问它,它会显示出来。这是密码

     protected void Button1_Click(object sender, EventArgs e)
        {
            string filename = TextBox1.Text;
            Response.ContentType = "application/octet-stream";
            Response.AppendHeader("content-diposition", "attach;filename" + filename);
            Response.TransmitFile(Server.MapPath("~/CustomerFiles/" + filename));
            Response.End();
        }
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   Poul Bak    8 年前

    这是我用来下载文件的代码,请确保 fuldFilNavn 包含文件的完整路径:

        public static void DownloadFil(string fuldFilNavn)
        {
            HttpContext context = HttpContext.Current;
            context.Response.ClearHeaders();
            context.Response.ClearContent();
            string filNavn = Uri.EscapeDataString(Path.GetFileName(fuldFilNavn)).Replace("+", "%20");
            context.Response.AppendHeader("Content-Disposition", "attachment;filename*=utf-8''" + filNavn);
            context.Response.AppendHeader("Last-Modified", File.GetLastWriteTimeUtc(fuldFilNavn).ToString("R"));
            context.Response.ContentType = "application/octet-stream";
            context.Response.AppendHeader("Content-Length", new FileInfo(fuldFilNavn).Length.ToString());
            context.Response.TransmitFile(fuldFilNavn);
            context.Response.End();
        }

    这将下载文件名中包含unicode字符的文件!

        2
  •  1
  •   Alexander Bell    8 年前

    您可以尝试以下ASP。NET/C#代码段:

    internal static void Download(string FileName)
    {
        HttpResponse _response = HttpContext.Current.Response;
        FileStream _fileStream;
        byte[] _arrContentBytes;
        try
        {
            // clear response obj
            _response.Clear();
    
            // clear content of response obj
            _response.ClearContent();
    
            // clear response headers
            _response.ClearHeaders();
    
            // enable response buffer
            _response.Buffer = true;
    
            // specify response content
            _response.ContentType = ContentType;
    
            _response.StatusCode = 206;
            _response.StatusDescription = "Partial Content";
    
            // create FileStream: IMPORTANT - specify FileAccess.Read
            _fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    
            // Bytes array size= (int)_fs.Length;
            _arrContentBytes = new byte[(int)_fileStream.Length];
    
            // read file into bytes array
            _fileStream.Read(_arrContentBytes, 0, (int)_fileStream.Length);
    
            // add response header
            _response.AddHeader("content-disposition", "attachment;filename=" + FileName);
    
            // ACTUAL PROCEDURE: use BinaryWrite to download file
            _response.BinaryWrite(_arrContentBytes);
    
            // ALTERNATIVE: TransmitFile
            //_response.TransmitFile(filePath);
    
            // close FileStream
            _fileStream.Flush();
            _fileStream.Close();
    
            _response.Flush();
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }
        catch { }
        finally
        {
            _fileStream = null;
            _arrContentBytes = null;
        }
    }
    

    为了获得根文件夹和完整路径,您可以使用 Server.MapPath 如您的原始解决方案或以下行中所示,以获得更好的性能:

    // get the root dir; fast
    string _root = AppDomain.CurrentDomain.BaseDirectory;
    

    此解决方案已在实际web应用程序中测试/实现( http://taxiom.com/Manual_Payday.aspx )-有关演示,请参阅页面右上角的“下载”按钮。希望这能有所帮助。