首页 > 解决方案 > 从 API 获取的文件内容创建 pdf 或其他文件类型

问题描述

我使用支持文档作为附件的 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 ..... 它可能是文件内容本身。它看起来与 web 服务文件内容相同。

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

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

标签: c#.netwindowsfileblazor

解决方案


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

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

推荐阅读