C# 从API获取的文件内容创建pdf或其他文件类型

C# 从API获取的文件内容创建pdf或其他文件类型,c#,.net,windows,file,blazor,C#,.net,Windows,File,Blazor,我使用支持文档作为附件的web服务。 我可以得到文件名,文件内容,mime类型等,但我不能使它成为一个工作文件。我试图打开我电脑上的文件,但不知怎么的它被破坏了 在本例中,我得到的文档是pdf,因此我尝试硬编码扩展以使其正常工作。在此之后,我将尝试从mime类型获取扩展,但这不是现在的问题。现在我根本无法在PDF阅读器中打开创建的文件,我需要让它正常工作 我尝试了以下代码: void CreateFileFromDocumentContent(string content, string

我使用支持文档作为附件的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///mti3nq0kmsawig9iag0kpdwnci9uexblic9dyxrhbg9ndqovugfnzgmgncawifinci9pdxrsaw5lcyayidagugug0kpj4ncmvuzg9iag0kmiawig9iag0kpdwnc。。。。。可能是文件内容本身,就好像你要在记事本中打开pdf一样。它看起来与webservice文件内容相同

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


我猜少了些什么。此Web服务也被第三方软件使用,在他们的解决方案中查找相同的文件效果很好,因此文件本身很好。

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

byte[]fileContent=Convert.FromBase64String(内容);

在不了解更多信息的情况下,我很确定API的答案不是表示PDF文件的UTF-8编码字符串。相反,它可能是一个base64字符串,表示组成文件的原始字节。使用该方法并将原始字节保存到文件good observation。成功了!非常感谢。没问题,我决定在下面贴一个答案,看看我的猜测结果如何是正确的