0

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

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

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

内容处置:表单数据;名称="视频"; 文件名="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);
        }
    }

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

4

1 回答 1

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

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

于 2013-04-16T14:56:33.090 回答