如何更改 httppostedfilebase 的内容类型?
Posted
技术标签:
【中文标题】如何更改 httppostedfilebase 的内容类型?【英文标题】:How to change the content type of httppostedfilebase? 【发布时间】:2018-08-30 09:14:38 【问题描述】:我正在使用 HttpPostedFileBase 通过 ASP.NET MVC 上传文件。我需要将此发布到 API 调用中,但出现错误
“状态码:403,原因短语:'禁止',版本:1.1,内容: System.Net.Http.StreamContent”。
这是因为我将文件内容作为“application/octet-stream”传递,而 API 调用希望内容类型为“application/vnd.qlik.sense.app”。 互联网上的许多帖子都说 HttpPostedFileBase 是只读的,我们无法更改内容类型。谁能告诉我如何更改 HttpPostedFileBase 的内容类型。这可能吗?
这是我的代码。
[HttpPost]
public ActionResult UploadFile(HttpPostedFile file)
if (file != null && file.ContentLength > 0)
var fileName = Path.GetFileNameWithoutExtension(file.FileName);
APIcall.Upload(fileName);
return RedirectToAction("Index");
【问题讨论】:
请参阅this answer 以了解如何从HttpPostedFileBase
继承以在构造函数中为ContentType
添加setter
我修改了如下代码,但文件值现在变为空白。 > [HttpPost] public ActionResult Upload(MemoryPostedFile file) if (file != null && file.ContentLength > 0) var fileName = Path.GetFileNameWithoutExtension(file.FileName); APICall.Upload(文件名); return RedirectToAction("Index");
【参考方案1】:
在这里找到这个how set HttpPostedFileBase ContentType value in runtime
public class MemoryPostedFile : HttpPostedFileBase
private readonly byte[] fileBytes;
public MemoryPostedFile(byte[] fileBytes, string fileName = null,string ContentType=null)
this.fileBytes = fileBytes;
this.FileName = fileName;
this.ContentType = ContentType;
this.InputStream = new MemoryStream(fileBytes);
public override int ContentLength => fileBytes.Length;
public override string FileName get;
public override string ContentType get;
public override Stream InputStream get;
【讨论】:
以上是关于如何更改 httppostedfilebase 的内容类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JsonString 和 HttpPostedFileBase 图片发布到 Web 服务?
HttpPostedFileBase 的非 System.Web 替代品?