如何在发送文件后维护供应商特定内容类型?

时间:2017-06-24 16:11:15

标签: asp.net-mvc asp.net-core content-type

将具有Vendor Specific Content-Type的文件发送到应用程序 ASP.NET Core 1.0 时,您的Content-Type将转换为其他内容类型。

问题:如何将原始内容类型保留在上传/存储(Azure)/下载中。是否应对Startup.csWeb.config进行任何更改(手动完成,但是否有效)?

内容类型原文: application/vnd.ms-pki.stl

发送或自动搜索后的内容类型(我没有确定转换何时完成):application/octet-stream

提交:表单通过Ajax发送

$.ajax({
        url: url,
        data: new FormData($("#")[0]),
        type: 'POST',
        processData: false,
        contentType: false,
        beforeSend: function () {
            // omitted
        },
        success: function (data) {
            // omitted
        },
        error: function (data) {
            // omitted
        }
   });

目标行动:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(PrintObjectCreateVM printObject)
    {

            if (!ModelState.IsValid)
            {
                return NotFound();
            }

            await PrintObjectService.Insert(printObject);

            return Ok();
    }

动作模型:

public class PrintObjectCreateVM
{
    public IFormFile PrintObjectImage { get; set; }

    public IFormFile PrintObjectPrintFile { get; set; }
}

1 个答案:

答案 0 :(得分:1)

当浏览器无法确定要上传的文件的内容类型时(例如,从文件扩展名或操作系统输入信息中推断出来),默认为application/octet-stream < / p>

要下载,请在返回文件时手动设置Content-Type。如果框架无法识别内容,则默认为application/octet-stream,任何客户端都应该能够处理这些内容。

例如

[Route("api/[controller]")]
public class DownloadController : Controller {
    //GET api/download/12345abc
    [HttpGet("{id}"]
    public async Task<IActionResult> Download(string id) {
        var stream = await {{__get_stream_here__}}
        var response = File(stream, "application/vnd.ms-pki.stl"); // FileStreamResult
        return response;
    }    
}