文件上传:ApiController

时间:2015-06-30 20:06:05

标签: asp.net asp.net-mvc asp.net-mvc-4 http asp.net-web-api

我使用multipart / form-data使用http post请求将文件上传到我的类,该类从ApiController扩展。

在虚拟项目中,我可以使用:

HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase 

在我的控制器方法中获取文件,其中我的请求类型为System.Web.HttpRequestWrapper

但是在另一个我没有添加任何库/ dll限制的生产应用程序中,我在System.Web.HttpRequestWrapper内看不到任何内容。

我的简单要求是获取发布的文件并将其转换为字节数组,以便能够将其存储到数据库中。

有什么想法?

1 个答案:

答案 0 :(得分:0)

此代码示例来自我之前做过的ASP.NET Web API项目。它允许上传图像文件。我删除了与您的问题无关的部分。

public async Task<HttpResponseMessage> Post()
{
    if (!Request.Content.IsMimeMultipartContent())
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);

    try
    {
        var provider = await Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider());

        var firstImage = provider.Contents.FirstOrDefault();

        if (firstImage == null || firstImage.Headers.ContentDisposition.FileName == null)
            return Request.CreateResponse(HttpStatusCode.BadRequest);

        using (var ms = new MemoryStream())
        {
            await firstImage.CopyToAsync(ms);

            var byteArray = ms.ToArray();
        }

        return Request.CreateResponse(HttpStatusCode.Created);
    }
    catch (Exception ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);
    }
}