如何在 Web API 中使用 MultipartFormDataStreamProvider 将两个不同的格式文件上传



我的客户端应用程序将通过多部分表单数据流向我发送图像文件和视频文件。我想将图像文件存储在图像文件夹中,将视频文件存储在视频文件夹中。

这就是来自客户端的请求

的样子

内容处置:表单数据;名称="照片";文件名="IMG_9322.JPG"内容类型:应用程序/八位字节流

内容处置:表单数据;名称="视频";文件名="样本.avi"内容类型:应用程序/八位字节流

这是我这边的 API 控制器方法

[HttpPost]
    [ActionName("UploadVideoEntry")]
    public async Task<HttpResponseMessage> UploadVideoEntry()
    {
        // Check if the request contains multipart/form-data.
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }
        var folderName = "photos";
        string root = HttpContext.Current.Server.MapPath("~/" + folderName);
        var provider = new MultipartFormDataStreamProvider(root);
        try
        {               
            // Read the form data and return an async task.
            var response = await Request.Content.ReadAsMultipartAsync(provider);              

            return Request.CreateResponse(HttpStatusCode.OK, new ResponseMessage<Object> { success = true, message = "Media Uploaded" });
        }
        catch (System.Exception e)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }
    }

这会将两个文件都存储在照片文件夹中,因为这是我给出的路径。但是我不知道如何分离两个文件并将它们存储在不同的路径中。如果有人有任何想法,请告诉我?谢谢

查看以下页面上的示例:

http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2

您希望在下载文件后获取文件名并移动它们。 我做过非常相似的事情。 获得文件名后,您可以使用

File.Move(currentPath,newPath)

将文件移动到新位置。 您的 currentPath 是您的root变量加上文件名。 不要忘记添加@"\":

currentPath = root + @"" + filename

下面是用于获取文件名的代码。

foreach (MultipartFileData file in provider.FileData)
{
    Trace.WriteLine(file.Headers.ContentDisposition.FileName);
    Trace.WriteLine("Server file path: " + file.LocalFileName);
}

我自己的第一步是测试文件名以确定扩展名,然后在找到合适的文件后执行您想要的任何操作,在本例中为移动。

相关内容

  • 没有找到相关文章

最新更新