public Task<IEnumerable<FileDesc>> Post() { const string nomeDaPasta = "uploads"; var path = HttpContext.Current.Server.MapPath("~/" + nomeDaPasta); var rootUrl = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, String.Empty); if (Request.Content.IsMimeMultipartContent()) { var streamProvider = new CustomMultipartFormDataStreamProvider(path); var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t => { if (t.IsFaulted || t.IsCanceled) throw new HttpResponseException(HttpStatusCode.InternalServerError); var fileInfo = streamProvider.FileData.Select(i => { var info = new FileInfo(i.LocalFileName); return new FileDesc(info.Name, rootUrl + "/" + nomeDaPasta + "/" + info.Name, info.Length / 1024); }); return fileInfo; }); return task; } throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "A requisição não esta bem formatada")); }
//HttpResponseMessage public Task<IEnumerable<FileDesc>> Post() { const string folderName = "uploads"; // Configures the path so save the uploaded file, while also accessing the HTTPContext which includes information about the original file path. string uploadFolderPath = HttpContext.Current.Server.MapPath(string.Format("~/{0}", folderName)); // Ensure the folder exists or the code will fail6 if (!Directory.Exists(uploadFolderPath)) { Directory.CreateDirectory(uploadFolderPath); } string rootUrl = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, String.Empty); if (Request.Content.IsMimeMultipartContent()) { // Basically there are some extra characters in the file path in the HTTP headers, so we need to removed those. var streamProvider = new CustomMultipartFormDataStreamProvider(uploadFolderPath); var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<IEnumerable<FileDesc>>(t => { if (t.IsFaulted || t.IsCanceled) { throw new HttpResponseException(HttpStatusCode.InternalServerError); } var fileInfo = streamProvider.FileData.Select(i => { var info = new FileInfo(i.LocalFileName); return new FileDesc(info.Name, String.Format("{0}/{1}/{2}", rootUrl, folderName, info.Name), info.Length / 1024); }); return fileInfo; }); // Results of all the files uploaded are returned as an ienumerable<filedescription> // It would be interesting to know how this gets converted to Json for KnockoutJS. return task; } else { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted")); } }
public async Task<HttpResponseMessage> Post() { string folderName = "uploads"; string PATH = HttpContext.Current.Server.MapPath("~/" + folderName); string rootUrl = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, String.Empty); if (Request.Content.IsMimeMultipartContent()) { var streamProvider = new CustomMultipartFormDataStreamProvider(PATH); //IEnumerable<FileDesc> fileInfos = null; await Request.Content.ReadAsMultipartAsync(streamProvider); var fileInfo = streamProvider.FileData.Select(i => { var info = new FileInfo(i.LocalFileName); return new FileDesc(info.Name, rootUrl + "/" + folderName + "/" + info.Name, info.Length / 1024); }); return Request.CreateResponse(HttpStatusCode.OK, fileInfo); } else { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted")); } }