如何在 .Net Core 中创建文件并在此文件中插入字节



我的问题是当我创建这个控制器时:

[HttpPost("[Action]")]
public IActionResult CreateFile(string word){
    word = "test";
    byte[] b = Encoding.ASCII.GetBytes(word);
    var txtBuilder = new StringBuilder();
    txtBuilder.Append(b);
    var txtContent = txtBuilder.ToString();
    var txtStream = new MemoryStream(Encoding.UTF8.GetBytes(txtContent));
    return File(txtStream,"text/plain","license.dat");
}

当我在 swagger 上尝试此请求时,它允许我下载一个文件。当我下载文件时,内容是:

System.Byte[]

但是当我大摇大摆地测试这个时:

[HttpPost("[Action]")]
public IActionResult CreateFile(string word){
    word = "test";
    byte[] b = Encoding.ASCII.GetBytes(word);
    return BadRequest(b);
}

b 的结果是:

dGVzdA==

我不想在创建的文件中看到testSystem.Byte[] 我想在创建的文件上看到 b 的结果。

好的,我有你。

这是你想要的:

[HttpGet("CreateFile")]
public IActionResult CreateFile(string word)
{
    word = "test";
    byte[] b = Encoding.ASCII.GetBytes(word);
    string base64 = System.Convert.ToBase64String(b);
    b = Encoding.ASCII.GetBytes(base64);
    var txtStream = new MemoryStream(b);
    return File(txtStream, "text/plain", "license.dat");
}

检查以下答案。你应该有一个正确的解决方案:从 .NET Core 控制器返回 CSV

TL;DR:使用 FileResult 而不是 IActionResult 或设置 Content-Disposition 标头。

另一篇非常好的文章: 如何从Web API返回文件

解释: 系统字节[]

我想,既然您已将内容类型设置为"文本/纯文本",就有.ToString(( 转换某处。看看这个问题的第一个联系。返回"System.Byte[]"而不是实际数据

数组

不会覆盖此方法,因此对于数组,它返回类型名称 - 这是默认实现。

我不确定,结果"dGVzdA=="是什么意思

但是这个简单的工作:

[HttpGet("CreateFile")]
public IActionResult CreateFile(string word)
{
    word = "test";
    byte[] b = Encoding.ASCII.GetBytes(word);
    var txtStream = new MemoryStream(b);
    return File(txtStream, "text/plain", "license.dat");
}

我收到一个里面有"测试"的文件。

但是你应该更好地使用

public FileResult CreateFile(string word)

而且,当然,您可以使用UTF8而不是ASCII

byte[] b = Encoding.UTF8.GetBytes(word);

最新更新