【问题标题】:Pdf looks empty in browser from ftp in ASP.net来自 ASP.net 中的 ftp 的 Pdf 在浏览器中看起来是空的
【发布时间】:2014-10-02 11:39:43
【问题描述】:

我想在浏览器中显示来自 ftp 的 pdf 文件。我找到了一些代码,我已经尝试过了。 pdf 显示在浏览器中,但文件为空。它具有所有页面作为原始文件,但没有页面上的内容。

string filename = Request.QueryString["view"];    
FileInfo objFile = new FileInfo(filename);

System.Net.FtpWebRequest request = (System.Net.FtpWebRequest)WebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + objFile.Name));
request.Credentials = new NetworkCredential(Ftp_Login_Name,Ftp_Login_Password);

System.Net.FtpWebResponse response = (System.Net.FtpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(responseStream);

Stream responseStream = response.GetResponseStream();
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentEncoding = reader.CurrentEncoding;
Response.ContentType = "application/pdf";            
Response.AddHeader("Content-Disposition", "inline; filename=" + Request.QueryString["name"]);
Response.Write(reader.ReadToEnd());
Response.End();

如何在浏览器中正确显示? http://i.stack.imgur.com/8weMr.png

【问题讨论】:

    标签: c# asp.net pdf ftp ftpwebrequest


    【解决方案1】:

    试试这个:

    FileInfo objFile = new FileInfo(filename);
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + filename));
    request.Credentials = new NetworkCredential(Ftp_Login_Name, Ftp_Login_Password);
    
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    
    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream);
    
    byte[] bytes = null;
    using (var memstream = new MemoryStream())
    {
        reader.BaseStream.CopyTo(memstream);
        bytes = memstream.ToArray();
    }
    
    Response.Clear();
    Response.ClearHeaders();
    Response.ClearContent();
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition", "inline; filename=" + objFile.Name);
    Response.BinaryWrite(bytes);
    Response.End();
    

    【讨论】:

    • 谢谢,这让我头疼了好几天……为了得到正确的字节数组,我必须使用这个代码:byte[] bytes = null;使用 (var memstream = new MemoryStream()) { reader.BaseStream.CopyTo(memstream);字节 = memstream.ToArray(); }
    【解决方案2】:

    Response.Write 用于向客户端发送文本。 PDF 文件包含二进制内容,因此内容可能会被错误地转换。

    请改用Response.BinaryWrite。此外,在您的代码中,您没有发送文件。试试这个:

    FileStream fs = File.OpenRead(filename);
    
    int length = (int)fs.Length;
    BinaryReader br = new BinaryReader(fs);
    byte[] buffer = br.ReadBytes(length);
    
    Response.Clear();
    Response.ClearHeaders();
    Response.ClearContent();
    Response.ContentEncoding = reader.CurrentEncoding;
    Response.ContentType = "application/pdf";            
    Response.AddHeader("Content-Disposition", "inline; filename=" + Request.QueryString["name"]);
    Response.BinaryWrite(buffer);
    

    【讨论】:

    • 有了Response.BinaryWrite我应该使用哪个代码,我不能使用reader.ReadToEnd()
    • 那段代码没有意义,你是在尝试使用响应流来写入输出吗?
    • 我该怎么做?我不知道,这不是我写的完整的代码。如何从 ftp 获取文件,然后在浏览器中显示,而不要求保存?
    • 我应该写什么来代替这个,File.OpenRead(filename)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2015-05-02
    • 1970-01-01
    • 2020-06-15
    相关资源
    最近更新 更多