将具有Vendor Specific Content-Type
的文件发送到应用程序 ASP.NET Core 1.0 时,您的Content-Type将转换为其他内容类型。
问题:如何将原始内容类型保留在上传/存储(Azure)/下载中。是否应对Startup.cs
或Web.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; }
}
答案 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;
}
}