예제 #1
0
 private void Rollback(CustomMultipartFormDataStreamProvider provider)
 {
     foreach (var file in provider.FileData)
     {
         try
         {
             File.Delete(file.LocalFileName);
         }
         catch (Exception) { }
     }
 }
예제 #2
0
        public async Task <HttpResponseMessage> Upload(int issueId)
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                return(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, "The request content must be in multipart format."));
            }

            // Fetch issue from db
            var issue = _issueRepository.Get(issueId, User.Identity.Name);

            if (issue == null)
            {
                throw new IssueNotFoundException();
            }

            var location = _locationRepository.Get(issue.LocationId);

            if (issue == null)
            {
                throw new LocationNotFoundException();
            }

            // TODO: Validate user access to this issue
            // ?

            // Include airport name in path (upper case)
            // C:\IssueManager\ImagesStorage\LJU\2\2-guid.jpg"
            String imageStorageLocation = @"C:\IssueManager\ImagesStorage\";

            imageStorageLocation += location.Name.ToUpper();
            imageStorageLocation += @"\";
            imageStorageLocation += issueId.ToString();

            // Makesure path exists
            if (System.IO.Directory.Exists(imageStorageLocation) == false)
            {
                System.IO.Directory.CreateDirectory(imageStorageLocation);
            }

            //string fileSaveLocation = HttpContext.Current.Server.MapPath("~/App_Data");
            var provider = new CustomMultipartFormDataStreamProvider(_imageRepository, imageStorageLocation, issueId);

            HttpResponseMessage response;

            try
            {
                await Request.Content.ReadAsMultipartAsync(provider);


                var vm = _imageRepository.Get(provider.ImageID);

                ApiResponse result = new ApiResponse
                {
                    Result      = ApiResult.Success,
                    JsonContent = JsonConvert.SerializeObject(vm, Formatting.None)
                };

                return(Request.CreateResponse(HttpStatusCode.OK, result));
            }
            catch (IOException ex)
            {
                switch (provider.Error)
                {
                case CustomMultipartFormDataStreamProvider.ErrorType.InvalidImageType:
                    response = Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, "Invalid image type specified. Must be jpg or png.");
                    break;

                default:
                    response = Request.CreateResponse(HttpStatusCode.InternalServerError);
                    break;
                }
            }
            catch (Exception e)
            {
                response = Request.CreateResponse(HttpStatusCode.InternalServerError);
            }

            Rollback(provider);

            return(response);
        }