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); } }
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; })); }
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()); } }