Ejemplo n.º 1
0
        public static async Task <HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "put", Route = "Upload")] HttpRequest req)
        {
            try
            {
                if (!req.Form.Files.Any() || req.Form["container"] == string.Empty)
                {
                    return(Utilities.Utilities.GetHttpResponseMessage_ReturnsStatusCodeAndMessage(
                               HttpStatusCode.BadRequest, "invalid request data"));
                }

                IImageService service = Utilities.Utilities.GetImageService();

                IContainerService container = new ContainerClass(req.Form["container"]);

                if (!service.CheckIfContainerNameIsValid(container))
                {
                    return(Utilities.Utilities.GetHttpResponseMessage_ReturnsStatusCodeAndMessage(
                               HttpStatusCode.BadRequest, "invalid container name"));
                }

                foreach (var imageFile in req.Form.Files)
                {
                    if (!service.CheckIfFileIsSupported(imageFile.FileName))
                    {
                        return(Utilities.Utilities.GetHttpResponseMessage_ReturnsStatusCodeAndMessage(
                                   HttpStatusCode.BadRequest, "invalid image format"));
                    }

                    if (service.GetUploadImageSecurityKey(container.GetContainerName(), imageFile.FileName, imageFile.Length.ToString()) != imageFile.Name)
                    {
                        return(Utilities.Utilities.GetHttpResponseMessage_ReturnsStatusCodeAndMessage(
                                   HttpStatusCode.Forbidden, ""));
                    }
                }

                List <string>    notUploadedFiles = new List <string>();
                List <ImageData> filesToUpload    = new List <ImageData>();

                IDatabaseService databaseService = Utilities.Utilities.GetDatabaseService();

                foreach (var imageToUpload in req.Form.Files)
                {
                    string    imagePath    = service.GetImagePathUpload(imageToUpload.FileName);
                    ImageData uploadResult = service.UploadImage(
                        req.Form.Files.GetFile(imageToUpload.Name).OpenReadStream(),
                        container,
                        imagePath);

                    if (uploadResult.ImageName.IsNullOrEmpty())
                    {
                        notUploadedFiles.Add(imageToUpload.FileName);
                    }
                    else
                    {
                        filesToUpload.Add(uploadResult);
                    }
                }

                if (filesToUpload.Any())
                {
                    databaseService.SaveImagesData(filesToUpload);
                }

                if (notUploadedFiles.Any())
                {
                    return(Utilities.Utilities.GetHttpResponseMessage_ReturnsStatusCodeAndMessage(
                               HttpStatusCode.MultiStatus, JsonConvert.SerializeObject(notUploadedFiles)));
                }


                return(Utilities.Utilities.GetHttpResponseMessage_ReturnsStatusCodeAndMessage(
                           HttpStatusCode.Created, "Uploaded successfully"));
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
                return(Utilities.Utilities.GetHttpResponseMessage_ReturnsStatusCodeAndMessage(
                           HttpStatusCode.InternalServerError, "Something gone wrong"));
            }
        }