Exemplo n.º 1
0
        public async Task <MediaObjectInfo> NewMediaObjectAsync(string blogid, string username, string password, MediaObject mediaObject)
        {
            EnsureUser(username, password);

            try
            {
                // TODO: Check extension names

                var bits = Convert.FromBase64String(mediaObject.bits);

                var pFilename = _fileNameGenerator.GetFileName(mediaObject.name);
                var filename  = await _blogImageStorage.InsertAsync(pFilename, bits);

                var imageUrl = $"{Helper.ResolveRootUrl(null, _blogConfig.GeneralSettings.CanonicalPrefix, true)}image/{filename}";

                MediaObjectInfo objectInfo = new MediaObjectInfo {
                    url = imageUrl
                };
                return(objectInfo);
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                throw new MetaWeblogException(e.Message);
            }
        }
Exemplo n.º 2
0
    public Task <MediaObjectInfo> NewMediaObjectAsync(string blogid, string username, string password, MediaObject mediaObject)
    {
        EnsureUser(username, password);

        return(TryExecuteAsync(async() =>
        {
            // TODO: Check extension names

            var bits = Convert.FromBase64String(mediaObject.bits);

            var pFilename = _fileNameGenerator.GetFileName(mediaObject.name);
            var filename = await _blogImageStorage.InsertAsync(pFilename, bits);

            var imageUrl = $"{Helper.ResolveRootUrl(null, _blogConfig.GeneralSettings.CanonicalPrefix, true)}image/{filename}";

            var objectInfo = new MediaObjectInfo {
                url = imageUrl
            };
            return objectInfo;
        }));
    }
Exemplo n.º 3
0
        public async Task <IActionResult> UploadImageAsync(IFormFile file, [FromServices] IFileNameGenerator fileNameGenerator)
        {
            try
            {
                if (null == file)
                {
                    Logger.LogError("file is null.");
                    return(BadRequest());
                }

                if (file.Length <= 0)
                {
                    return(BadRequest());
                }

                var name = Path.GetFileName(file.FileName);
                if (name == null)
                {
                    return(BadRequest());
                }

                var ext = Path.GetExtension(name).ToLower();
                var allowedImageFormats = new[] { ".png", ".jpg", ".jpeg", ".bmp", ".gif" };
                if (!allowedImageFormats.Contains(ext))
                {
                    Logger.LogError($"Invalid file extension: {ext}");
                    return(BadRequest());
                }

                var primaryFileName  = fileNameGenerator.GetFileName(name);
                var secondaryFieName = fileNameGenerator.GetFileName(name, "origin");

                await using var stream = new MemoryStream();
                await file.CopyToAsync(stream);

                // Add watermark
                MemoryStream watermarkedStream = null;
                if (_blogConfig.WatermarkSettings.IsEnabled && ext != ".gif")
                {
                    using var watermarker = new ImageWatermarker(stream, ext)
                          {
                              SkipWatermarkForSmallImages = true,
                              SmallImagePixelsThreshold   = Constants.SmallImagePixelsThreshold
                          };
                    Logger.LogInformation($"Adding watermark onto image '{primaryFileName}'");

                    watermarkedStream = watermarker.AddWatermark(
                        _blogConfig.WatermarkSettings.WatermarkText,
                        Color.FromArgb(128, 128, 128, 128),
                        WatermarkPosition.BottomRight,
                        15,
                        _blogConfig.WatermarkSettings.FontSize);
                }

                var response = await _imageStorage.InsertAsync(primaryFileName,
                                                               watermarkedStream != null?
                                                               watermarkedStream.ToArray() :
                                                                   stream.ToArray());

                if (_blogConfig.WatermarkSettings.KeepOriginImage)
                {
                    var arr = stream.ToArray();
                    _ = Task.Run(async() => await _imageStorage.InsertAsync(secondaryFieName, arr));
                }

                Logger.LogInformation($"Image '{primaryFileName}' uloaded.");

                if (response.IsSuccess)
                {
                    return(Json(new
                    {
                        location = $"/uploads/{response.Item}",
                        filename = response.Item
                    }));
                }
                Logger.LogError(response.Message);
                return(ServerError());
            }
            catch (Exception e)
            {
                Logger.LogError(e, "Error uploading image.");
                return(ServerError());
            }
        }