如何使用Asp.Net Web API中的MultipartFormDataStreamProvider将两个不同的格式文件上载到两个不同的文件路径

时间:2012-12-05 06:07:34

标签: c# asp.net asp.net-mvc stream asp.net-web-api

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

这是来自客户端的请求的样子

内容 - 处置:表单数据; NAME = “照片”;文件名= “IMG_9322.JPG” 内容类型:应用/八位字节流

内容 - 处置:表单数据; NAME = “视频”;文件名= “SAMPLE.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);
        }
    }

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

1 个答案:

答案 0 :(得分:0)

请查看以下页面中的示例:

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);
}

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