public OperationResultWithData <ScoContentDto> UploadFile(string folderScoId, IFormFile file) { // TRICK: var form = this.ControllerContext.HttpContext.Request.Form; string sessionKey = form["session"]; Session = GetReadOnlySession(Guid.Parse(sessionKey)); if (Session == null) { return(OperationResultWithData <ScoContentDto> .Error(Messages.SessionTimeOut)); } LmsCompany = Session.LmsCompany; // TODO: check user is teacher + feature is enabled string name = form["name"]; string description = form["description"]; string customUrl = form["customUrl"]; try { string fileName = file.FileName; var ac = this.GetUserProvider(); var helper = new ContentEditControllerHelper(Logger, ac); int fileSize; ScoInfoResult createdFile = helper.UploadFile(folderScoId, name, description, customUrl, fileName, file.ContentType, file.OpenReadStream(), out fileSize); var sco = ac.GetScoContent(createdFile.ScoInfo.ScoId); var dto = new ScoContentDtoMapper().Map(sco.ScoContent); //TRICK: dto.ByteCount = fileSize; return(dto.ToSuccessResult()); } catch (Exception ex) { IUserMessageException userError = ex as IUserMessageException; if (userError != null) { return(OperationResultWithData <ScoContentDto> .Error(ex.Message)); } throw; } }
public async Task <HttpResponseMessage> UploadFile(string folderScoId) { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } var provider = new MultipartFormDataMemoryStreamProvider(); await Request.Content.ReadAsMultipartAsync(provider); string name = provider.FormData["name"]; string description = provider.FormData["description"]; string customUrl = provider.FormData["customUrl"]; if (!provider.FileStreams.Any()) { throw new HttpResponseException(HttpStatusCode.BadRequest); //return Content(HttpStatusCode.BadRequest, "No file uploaded"); } if (provider.FileStreams.Count != 1) { throw new HttpResponseException(HttpStatusCode.BadRequest); //return Content(HttpStatusCode.BadRequest, "Single file expected"); } try { string fileName = provider.FileStreams.First().Key; MultipartFormDataMemoryStreamProvider.FileContent stream = provider.FileStreams.First().Value; var ac = this.GetUserProvider(); var contentService = new ContentService(Logger, ac); var helper = new ContentEditControllerHelper(Logger, ac); int fileSize; ScoInfoResult createdFile = helper.UploadFile(folderScoId, name, description, customUrl, fileName, stream.ContentType, stream.Stream, out fileSize); var sco = ac.GetScoContent(createdFile.ScoInfo.ScoId); var dto = new ScoContentDtoMapper().Map(sco.ScoContent); //TRICK: dto.ByteCount = fileSize; string output = JsonSerializer.JsonSerialize(dto.ToSuccessResult()); var response = new HttpResponseMessage(); response.Content = new StringContent(output); response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); return(response); } catch (Exception ex) { IUserMessageException userError = ex as IUserMessageException; if (userError != null) { string output = JsonSerializer.JsonSerialize(OperationResultWithData <ScoContentDto> .Error(ex.Message)); //JsonConvert.SerializeObject(OperationResultWithData<ScoContentDto>.Error(ex.Message)); var response = new HttpResponseMessage(); response.Content = new StringContent(output); response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); return(response); } throw; } }