/// <summary> /// Adds the photo. /// </summary> /// <param name="photo">The photo.</param> /// <returns></returns> public Response <PhotoViewModel> AddPhoto(PhotoViewModel photo) { string apiUrl = baseRoute + "addPhoto"; var response = communicationManager.Post <PhotoModel, Response <PhotoModel> >(photo.ToModel(), apiUrl); return(response.ToViewModel()); }
/// <summary> /// Updates the photo. /// </summary> /// <param name="assessment">The assessment.</param> /// <returns></returns> public Response <PhotoViewModel> UpdatePhoto(PhotoViewModel assessment) { string apiUrl = baseRoute + "updatePhoto"; var response = communicationManager.Put <PhotoModel, Response <PhotoModel> >(assessment.ToModel(), apiUrl); return(response.ToViewModel()); }
public async Task <HttpResponseMessage> Upload() { // Check if the request contains multipart/form-data. if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } // Key - file name, Value - error of the loading var uploadFileInfos = new List <UploadResultViewModel>(); try { // Get temporary album Id int tempAlbumId = _albumService.GetAlbumId(User.Id, "Temporary"); // Get path to the temporary album folder string pathToTempAlbum = _pathUtil.BuildAbsoluteAlbumPath(User.Id, tempAlbumId); // Create directory, if it isn't exist if (!_directoryWrapper.Exists(pathToTempAlbum)) { _directoryWrapper.CreateDirectory(pathToTempAlbum); } // TODO create this instance with fabrik var provider = new MultipartFormDataStreamProvider(pathToTempAlbum); // Read the form data from request (save all files in selected folder) TODO must be wrapped too await Request.Content.ReadAsMultipartAsync(provider); int albumId = _albumService.GetAlbumId(User.Id, "Temporary"); // Check all uploaded files foreach (MultipartFileData fileData in provider.FileData) { string originalFileName = fileData.Headers.ContentDisposition.FileName.Trim('"'); long fileSize = _fileHelper.GetFileSize(fileData.LocalFileName); string fileHash = _cryptoProvider.GetHash(string.Format("{0}{1}", originalFileName, fileSize)); if (fileSize > MAX_PHOTO_SIZE_IN_BYTES) { _fileWrapper.Delete(fileData.LocalFileName); uploadFileInfos.Add(new UploadResultViewModel { Hash = fileHash, IsAccepted = false, Error = "This file contains no image data" }); } // Is it really image file format ? if (!_fileHelper.IsImageFile(fileData.LocalFileName)) { _fileWrapper.Delete(fileData.LocalFileName); uploadFileInfos.Add(new UploadResultViewModel { Hash = fileHash, IsAccepted = false, Error = "This file contains no image data" }); continue; } string format = _fileHelper.GetRealFileFormat(fileData.LocalFileName); var photoModel = _photoService.AddPhoto(PhotoViewModel.ToModel(User.Id, albumId, format)); string destFileName = string.Format("{0}\\{1}.{2}", pathToTempAlbum, photoModel.Id, format); try { if (File.Exists(destFileName)) { _fileWrapper.Delete(destFileName); } _fileWrapper.Move(fileData.LocalFileName, destFileName); } catch (IOException) { _fileWrapper.Delete(fileData.LocalFileName); uploadFileInfos.Add(new UploadResultViewModel { Hash = fileHash, IsAccepted = false, Error = "File already uploaded" }); continue; } // Create thumbnails for photo _photoProcessor.CreateThumbnails(User.Id, albumId, photoModel.Id, photoModel.Format); uploadFileInfos.Add(new UploadResultViewModel { Hash = fileHash, Id = photoModel.Id, IsAccepted = true }); } // Create collage for album 'Temporary' _collageProcessor.CreateCollage(User.Id, albumId); } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message)); } return(Request.CreateResponse(HttpStatusCode.OK, uploadFileInfos, new JsonMediaTypeFormatter())); }