【问题标题】:Create a pdf or other file type from file content fetched from API从 API 获取的文件内容创建 pdf 或其他文件类型
【发布时间】:2021-03-31 02:14:00
【问题描述】:

我使用支持将文档作为附件的 Web 服务。 我可以获得文件名、文件内容、mime 类型等,但我无法将其转换为工作文件。我尝试在我的计算机上打开文件,但不知何故损坏了。

在这种情况下,我得到的文档是 pdf,因此我尝试对扩展进行硬编码以使其正常工作。在此之后,我将尝试从 mime 类型中获取扩展名,但这不是现在的问题。现在我根本无法在 PDF 阅读器中打开创建的文件,我需要让它工作。

我试过以下代码:

    void CreateFileFromDocumentContent(string content, string fileName)
{
    string destinationFile = @"wwwroot/" + fileName + ".pdf";
    FileInfo fi = new FileInfo(destinationFile);

    try
    {
        // Create a new file     
        using (FileStream fs = File.Create(destinationFile))
        {
            // Add some text to file    
            Byte[] fileContent = new UTF8Encoding(true).GetBytes(content);
            fs.Write(fileContent, 0, fileContent.Length);
        }

        // Write file contents on console.     
        using (StreamReader sr = File.OpenText(destinationFile))
        {
            string s = "";
            while ((s = sr.ReadLine()) != null)
            {
                System.Diagnostics.Debug.Print(s);
            }
        }
    }
    catch (Exception Ex)
    {
        System.Diagnostics.Debug.Print(Ex.Message);
    }
}

我正在将文件内容写入控制台。 它看起来像 JVBERi0xLjMNCiX/////MTI3NQ0KMSAwIG9iag0KPDwNCi9UeXBlIC9DYXRhbG9nDQovUGFnZXMgNCAwIFINCi9PdXRsaW5lcyAyIDAgUg0KPj4NCmVuZG9iag0KMiAwIG9iag0KPDwNC ..... 它可能是文件内容本身。它看起来与 webservice 文件内容相同。

我尝试将文件编写为纯文本(不是我的代码示例中的字节),但它也不起作用。

我猜有些东西不见了。该网络服务也被第三方软件使用,并且在他们的解决方案中查找相同的文件可以正常工作,因此文件本身很好。

【问题讨论】:

  • 不知道更多,我很确定来自 API 的答案不是代表 PDF 文件的 UTF-8 编码字符串。相反,它可能是一个 base64 字符串,表示构成文件的原始字节。使用Convert.FromBase64String 方法并将原始字节保存到文件中
  • 观察力不错。那成功了!非常感谢。
  • 没问题,我决定在下面发布一个答案,看看我的猜测是如何正确的

标签: c# .net windows file blazor


【解决方案1】:

问题不在于 API 或如何保存文件,而在于如何将字符串内容转换为文件本身的内容。 PDF 不是基于文本的格式(需要引用),而是特定格式的原始字节,以便 PDF 阅读器可以打开它。意思是,简单地将字节转换为 UTF-8 编码文本并保存它们是不正确的。相反,响应正文中的字符串是base64 编码的,这是一种将内存表示为字符串的方式,因此需要将其解码为原始字节以进行保存。幸运的是,C#/ .NET 有一个内置的方法可以做到这一点,就像这样:

byte[] fileContent = Convert.FromBase64String(content);

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 2014-02-10
    • 2011-05-15
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多