如何更改 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 替代品?

无法将 HttpPostedFileBase 保存到会话变量并使用两次

从 HttpPostedFileBase 获取文件路径

重写HttpPostedFileBase 图片压缩

我无法在操作方法中将我的文件传递给 httppostedfilebase