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