在ASP.NET MVC Web api控制器中上载文件

在ASP.NET MVC Web api控制器中上载文件,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我想创建一个WEB API,将文件从给定的客户端上传到Azure上。为此,我知道我可以使用如下类:MultipartFormDataStreamProvider(不确定该类是否适用于Azure) 我希望这个API可以从各种应用程序中访问。对于初学者来说,这是一个简单的.NET应用程序。但我的问题是,我可以使用相同的API来处理从Android应用程序、Windows8应用程序等上传的文件吗 如果这是不可能的,那么所有这些应用程序都需要单独的API吗 我对API的想法是,它可以跨各种应用程序使用,

我想创建一个WEB API,将文件从给定的客户端上传到Azure上。为此,我知道我可以使用如下类:MultipartFormDataStreamProvider(不确定该类是否适用于Azure)

我希望这个API可以从各种应用程序中访问。对于初学者来说,这是一个简单的.NET应用程序。但我的问题是,我可以使用相同的API来处理从Android应用程序、Windows8应用程序等上传的文件吗

如果这是不可能的,那么所有这些应用程序都需要单独的API吗


我对API的想法是,它可以跨各种应用程序使用,以实现所需的功能。但在这种情况下,上传文件所需的类将限制其使用

上传图像的Web Api代码

[System.Web.Http.AcceptVerbs("POST")]
        public async Task<object> AddAttachment()
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
            }

            NamedMultipartFormDataStreamProvider streamProvider = new NamedMultipartFormDataStreamProvider(
                HttpContext.Current.Server.MapPath("~/App_Data/"));

            await Request.Content.ReadAsMultipartAsync(streamProvider);
            string path = streamProvider.FileData.Select(entry => entry.LocalFileName).First();
            byte[] imgdata = System.IO.File.ReadAllBytes(path);

            return new
            {
                FileNames = streamProvider.FileData.Select(entry => entry.LocalFileName),

            };
        }
[System.Web.Http.AcceptVerbs(“POST”)]
公共异步任务AddAttachment()
{
if(!Request.Content.IsMimeMultipartContent(“表单数据”))
{
抛出新的HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
}
NamedMultipartFormDataStreamProvider streamProvider=新NamedMultipartFormDataStreamProvider(
HttpContext.Current.Server.MapPath(“~/App\u Data/”);
wait Request.Content.ReadAsMultipartAsync(streamProvider);
string path=streamProvider.FileData.Select(entry=>entry.LocalFileName.First();
byte[]imgdata=System.IO.File.ReadAllBytes(路径);
还新
{
FileNames=streamProvider.FileData.Select(entry=>entry.LocalFileName),
};
}

@nikhil pinto:ASP.NET Web API帮助您创建REST Web服务,支持HTTP请求的任何类型的客户端都可以使用该服务。我在这里找到了这篇文章


非常好,因为它说明了如何从不同的客户端调用web服务。请查看。

请查找下面的示例代码,以便通过post方法将多个文件发送到.Net web api

    public string UploadImages(ServiceCenterPost socialCompany)
    {
        var url = "api/Images/SaveImage";
        if (socialCompany.ThumbnailUrlFileUpload.Count() > 0)
        {
            var fullURL = ConfigurationManager.AppSettings["ServiceApi"] + url;
            HttpClient client = new HttpClient();
            MultipartFormDataContent form = new MultipartFormDataContent();
            var stringContent = new StringContent(JsonConvert.SerializeObject(new SocialCompanyAdmin { CompanyCode = socialCompany.CompanyCode }));
            stringContent.Headers.Add("Content-Disposition", "form-data; name=\"fileModel\"");
            form.Add(stringContent, "json");
            //loop each files from file upload control
            foreach (var file in socialCompany.ThumbnailUrlFileUpload)
            {
                if (file != null && file.ContentLength > 0)
                {                        
                    var streamContent = new StreamContent(file.InputStream);
                    streamContent.Headers.Add("Content-Type", "application/octet-stream");
                    streamContent.Headers.Add("Content-Disposition", "form-data; name=\"file\"; filename=\"" + Path.GetFileName(file.FileName) + "\"");
                    form.Add(streamContent, "file", Path.GetFileName(file.FileName));
                }
            }
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            client.DefaultRequestHeaders.Add("Accept-Language", Language);
            var response = client.PostAsync(fullURL, form).Result;
            if (response.IsSuccessStatusCode)
            {
                    string modelObject = response.Content.ReadAsStringAsync().Result;
                    return JsonConvert.DeserializeObject<string>(modelObject);

            }              
        }
        return null;
    } 
.NETWebAPI方法

   [HttpPost]
    public string SaveImage()
    {
       string uploadedfilelist="";
        if (((IList)HttpContext.Current.Request.Form.AllKeys).Contains("fileModel"))
        {
            var activity = JsonConvert.DeserializeObject<SocialCompanyPost>(HttpContext.Current.Request.Form["fileModel"]);

            var files = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files : null;
            if (files != null && files.Count > 0)
            {
                 for (int i = 0; i < files.Count; i++)
                    {
                        if (files[i].ContentLength > 0)
                        {
                            try
                            {
                                var filepath = HttpContext.Current.Server.MapPath("~/Images/ServiceCenters/" + files[i].FileName);//, ms.ToArray());
                                files[i].SaveAs(filepath);
                                uploadedfilelist += files[i].FileName+",";
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e);
                                throw;
                            }

                        }
                    }
            }
        }
        return uploadedfilelist;
    } 
[HttpPost]
公共字符串SaveImage()
{
字符串uploadedfilelist=“”;
if(((IList)HttpContext.Current.Request.Form.AllKeys).Contains(“fileModel”))
{
var activity=JsonConvert.DeserializeObject(HttpContext.Current.Request.Form[“fileModel]”);
var files=HttpContext.Current.Request.files.Count>0?HttpContext.Current.Request.files:null;
if(files!=null&&files.Count>0)
{
对于(int i=0;i0)
{
尝试
{
var filepath=HttpContext.Current.Server.MapPath(“~/Images/ServiceCenters/”+files[i].FileName);/,ms.ToArray());
文件[i].SaveAs(文件路径);
uploadedfilelist+=文件[i]。文件名+“,”;
}
捕获(例外e)
{
控制台写入线(e);
投掷;
}
}
}
}
}
返回上传的文件列表;
} 
客户端MVC应用程序post方法调用web api post方法

    public string UploadImages(ServiceCenterPost socialCompany)
    {
        var url = "api/Images/SaveImage";
        if (socialCompany.ThumbnailUrlFileUpload.Count() > 0)
        {
            var fullURL = ConfigurationManager.AppSettings["ServiceApi"] + url;
            HttpClient client = new HttpClient();
            MultipartFormDataContent form = new MultipartFormDataContent();
            var stringContent = new StringContent(JsonConvert.SerializeObject(new SocialCompanyAdmin { CompanyCode = socialCompany.CompanyCode }));
            stringContent.Headers.Add("Content-Disposition", "form-data; name=\"fileModel\"");
            form.Add(stringContent, "json");
            //loop each files from file upload control
            foreach (var file in socialCompany.ThumbnailUrlFileUpload)
            {
                if (file != null && file.ContentLength > 0)
                {                        
                    var streamContent = new StreamContent(file.InputStream);
                    streamContent.Headers.Add("Content-Type", "application/octet-stream");
                    streamContent.Headers.Add("Content-Disposition", "form-data; name=\"file\"; filename=\"" + Path.GetFileName(file.FileName) + "\"");
                    form.Add(streamContent, "file", Path.GetFileName(file.FileName));
                }
            }
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            client.DefaultRequestHeaders.Add("Accept-Language", Language);
            var response = client.PostAsync(fullURL, form).Result;
            if (response.IsSuccessStatusCode)
            {
                    string modelObject = response.Content.ReadAsStringAsync().Result;
                    return JsonConvert.DeserializeObject<string>(modelObject);

            }              
        }
        return null;
    } 
公共字符串上载图像(ServiceCenterPost socialCompany)
{
var url=“api/Images/SaveImage”;
if(socialCompany.ThumbnailUrlFileUpload.Count()>0)
{
var fullURL=ConfigurationManager.AppSettings[“ServiceApi”]+url;
HttpClient=新的HttpClient();
MultipartFormDataContent form=新的MultipartFormDataContent();
var stringContent=new stringContent(JsonConvert.SerializeObject(new SocialCompanyAdmin{CompanyCode=socialCompany.CompanyCode}));
添加(“内容处置”,“表单数据;名称=\“文件模型\”);
添加(stringContent,“json”);
//从文件上载控件循环每个文件
foreach(socialCompany.ThumbnailUrlFileUpload中的var文件)
{
如果(file!=null&&file.ContentLength>0)
{                        
var streamContent=新的streamContent(file.InputStream);
添加(“内容类型”、“应用程序/八位字节流”);
streamContent.Headers.Add(“内容处置”,“表单数据;名称=\”文件名=\”+路径.GetFileName(file.filename)+“\”);
Add(streamContent,“file”,Path.GetFileName(file.FileName));
}
}
client.DefaultRequestHeaders.Add(“授权”、“承载人”+令牌);
client.DefaultRequestHeaders.Add(“接受语言”,语言);
var response=client.PostAsync(fullURL,form).Result;
if(响应。IsSuccessStatusCode)
{
字符串modelObject=response.Content.ReadAsStringAsync().Result;
返回JsonConvert.DeserializeObject(modelObject);
}              
}
返回null;
} 

thanx用于代码。但我已经有了这个。我需要知道,当我尝试从Android应用程序上传文件时,这是否有效。