c# - 从 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 服务文件内容相同。
我试图将文件写为纯文本(不是我的代码示例中的字节),但它也不起作用。
我猜有些东西不见了。该网络服务也被第三方软件使用,并且在他们的解决方案中查找相同的文件可以正常工作,因此文件本身很好。
解决方案
问题不在于 API 或如何保存文件,而在于如何将字符串内容转换为文件本身的内容。PDF 不是基于文本的格式(需要引用),而是特定格式的原始字节,以便 PDF 阅读器可以打开它。意思是,简单地将字节转换为 UTF-8 编码文本并保存它们是不正确的。相反,响应正文中的字符串是base64编码的,这是一种将内存表示为字符串的方式,因此需要将其解码为原始字节以进行保存。幸运的是,C#/ .NET 有一个内置的方法可以做到这一点,如下所示:
byte[] fileContent = Convert.FromBase64String(content);
推荐阅读
- http - 对每个 API 调用使用 Post ,即使是获取资源。?
- c# - play audio from TCP/IP server in UWP client on PI3
- python - 如何使用正则表达式查找字符串中第一次出现的字母和随后的数字?
- amazon-web-services - AWS CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. The headers are present
- reactjs - Prevent Backspace to avoid erasing of initial value in text box in React
- r - 如果列表中有值,则替换字段值
- git - 如果我在分叉的存储库中打开一个问题,修复它并拉请求提交,原始 Github 存储库是否也有问题?
- c++ - 为什么我的归并排序最后放了一个随机的 4?
- c++ - 为什么我不能继续使用 std::cin 向同一个变量输入其他值?
- reactjs - 为导入的节点模块提供 React Context