C# 从API获取的文件内容创建pdf或其他文件类型
我使用支持文档作为附件的web服务。 我可以得到文件名,文件内容,mime类型等,但我不能使它成为一个工作文件。我试图打开我电脑上的文件,但不知怎么的它被破坏了 在本例中,我得到的文档是pdf,因此我尝试硬编码扩展以使其正常工作。在此之后,我将尝试从mime类型获取扩展,但这不是现在的问题。现在我根本无法在PDF阅读器中打开创建的文件,我需要让它正常工作 我尝试了以下代码:C# 从API获取的文件内容创建pdf或其他文件类型,c#,.net,windows,file,blazor,C#,.net,Windows,File,Blazor,我使用支持文档作为附件的web服务。 我可以得到文件名,文件内容,mime类型等,但我不能使它成为一个工作文件。我试图打开我电脑上的文件,但不知怎么的它被破坏了 在本例中,我得到的文档是pdf,因此我尝试硬编码扩展以使其正常工作。在此之后,我将尝试从mime类型获取扩展,但这不是现在的问题。现在我根本无法在PDF阅读器中打开创建的文件,我需要让它正常工作 我尝试了以下代码: void CreateFileFromDocumentContent(string content, string
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。成功了!非常感谢。没问题,我决定在下面贴一个答案,看看我的猜测结果如何是正确的