Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net Web API RC:多部分文件上载到Memorystream_C#_File Upload_Asp.net Web Api - Fatal编程技术网

C# ASP.Net Web API RC:多部分文件上载到Memorystream

C# ASP.Net Web API RC:多部分文件上载到Memorystream,c#,file-upload,asp.net-web-api,C#,File Upload,Asp.net Web Api,我正试图将上传的文件保存到数据库/内存流中,但我想不出来 我现在只有这个: public Task<HttpResponseMessage> AnswerQuestion() { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } var root

我正试图将上传的文件保存到数据库/内存流中,但我想不出来

我现在只有这个:

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

    var root = HttpContext.Current.Server.MapPath("~/App_Data");
    var provider = new MultipartFormDataStreamProvider(root);

    var task = Request.Content.ReadAsMultipartAsync(provider).
        ContinueWith<HttpResponseMessage>(t =>
        {
            if (t.IsFaulted || t.IsCanceled)
            {
                Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
            }

            foreach (var file in provider.FileData)
            {
                Trace.WriteLine(file.Headers.ContentDisposition.FileName);
                Trace.WriteLine("Server file path: " + file.LocalFileName);
            }
            return Request.CreateResponse(HttpStatusCode.OK);
        });

    return task;
}
公共任务回答问题()
{
如果(!Request.Content.IsMimeMultipartContent())
{
抛出新的HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var root=HttpContext.Current.Server.MapPath(“~/App_Data”);
var provider=新的MultipartFormDataStreamProvider(根);
var task=Request.Content.ReadAsMultipartAsync(提供程序)。
继续(t=>
{
如果(t.IsFaulted | | t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError,t.Exception);
}
foreach(provider.FileData中的var文件)
{
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine(“服务器文件路径:“+file.LocalFileName”);
}
返回Request.CreateResponse(HttpStatusCode.OK);
});
返回任务;
}
当然,这只会将文件保存到特定位置。我想我必须使用从MediaTypeFormatter派生的自定义类来将其保存到MemoryStream,但我不知道如何做


请帮忙。提前谢谢

您可以为您的场景使用MultipartMemoryStreamProvider


[Updated]注意到您正在使用RC,我认为MultipartMemoryStreamProvider是在RC之后添加的,目前在RTM中。

多部分内容可以读入抽象
MultipartStreamProvider
类的任何具体实现中-请参阅

这些是:

- MultipartMemoryStreamProvider 
- MultipartFileStreamProvider 
- MultipartFormDataStreamProvider 
- MultipartRelatedStreamProvider
就你而言:

if (Request.Content.IsMimeMultipartContent())
{              
   var streamProvider = new MultipartMemoryStreamProvider();
   var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t =>
   {
       foreach (var item in streamProvider.Contents)
       {
           //do something
       }
   });
}

这是否意味着每个部分的内容都将加载到内存中?如果上载了大文件,这是否意味着您必须编写自己的
MultipartStreamProvider
实现?
//执行什么样的操作。。。?