public async Task <Result <MongoDBImageSaveOutput> > SaveImageToMongoDBAsync(string hostName, UriBasedImageSaveInput uriBasedImageInput) { var imageBytes = (await GetImageBytesFromWebAsync(uriBasedImageInput.Uri)).Data; if (imageBytes == null) { return(Result.FromError <MongoDBImageSaveOutput>($"无法从地址:{uriBasedImageInput.Uri}获取到图片数据请确认")); } else { var contentBasedImageInput = new ContentBasedImageSaveInput { Title = uriBasedImageInput.Title, Description = uriBasedImageInput.Description, X1 = uriBasedImageInput.X1, X2 = uriBasedImageInput.X2, Y1 = uriBasedImageInput.Y1, Y2 = uriBasedImageInput.Y2, Base64String = Convert.ToBase64String(imageBytes) }; return(await SaveImageToMongoDBAsync(hostName, contentBasedImageInput)); } }
public async Task <Result <MongoDBImageSaveOutput> > SaveImageByContentAsync(ContentBasedImageSaveInput contentBasedImageInput) { return(await _imageService.SaveImageToMongoDBAsync(hostName : MongoDBImageProvider.DefaultHostName, contentBasedImageInput : contentBasedImageInput)); }
public async Task <Result <MongoDBImageSaveOutput> > SaveImageToMongoDBAsync(string hostName, ContentBasedImageSaveInput contentBasedImageInput) { var hostConfig = _mongoDBHostConfigs.FirstOrDefault(x => x.HostName.Equals(hostName, StringComparison.OrdinalIgnoreCase)); if (hostConfig == null) { return(Result.FromError <MongoDBImageSaveOutput>($"HostName:{hostName}无可匹配的HostConfig项")); } else { var imageInfo = new MagickImageInfo(contentBasedImageInput.ImageBytes); var imageCustomization = new ImageCustomization { X1 = contentBasedImageInput.X1 ?? 0, X2 = contentBasedImageInput.X2 ?? imageInfo.Width, Y1 = contentBasedImageInput.Y1 ?? 0, Y2 = contentBasedImageInput.Y2 ?? imageInfo.Height }; imageCustomization.ComputeHash(); var contentHash = contentBasedImageInput.Base64String.ToMD5HashString(); var imageMetadata = await _imageMetadataRepository.GetByContentHashAsync(contentHash); if (imageMetadata != null && imageMetadata.Customizations.Any(x => x.Hash == imageCustomization.Hash)) { var imageSaveOutput = new MongoDBImageSaveOutput { Id = imageMetadata.Id, ContentHash = contentHash, MetaHash = imageCustomization.Hash }; return(Result.FromError(imageSaveOutput, "已经存在该图片信息,请勿重复提交")); } else if (imageMetadata != null)//只保存原数据信息即可 { imageMetadata.Customizations.Add(imageCustomization); await _imageMetadataRepository.UpdateAsync(imageMetadata); var imageSaveOutput = new MongoDBImageSaveOutput { Id = imageMetadata.Id, ContentHash = contentHash, MetaHash = imageCustomization.Hash }; return(Result.FromData(imageSaveOutput)); } else//需要同时保存图片信息与原数据信息 { var gridFSBucket = GetGridFSBucket(hostConfig); var fileId = await gridFSBucket.UploadFromBytesAsync(contentBasedImageInput.Title, contentBasedImageInput.ImageBytes); imageMetadata = new ImageMetadata { Id = fileId, ContentHash = contentHash, Title = contentBasedImageInput.Title, Description = contentBasedImageInput.Description, Customizations = new List <ImageCustomization>() }; imageMetadata.Customizations.Add(imageCustomization); await _imageMetadataRepository.InsertAsync(imageMetadata); return(Result.FromData(new MongoDBImageSaveOutput { Id = fileId, ContentHash = contentHash, MetaHash = imageCustomization.Hash })); } } }
public async Task <Result <MongoDBImageSaveOutput> > SaveImageToMongoDBByContentAsync(string host, ContentBasedImageSaveInput contentBasedImageInput) { return(await _imageService.SaveImageToMongoDBAsync(hostName : host, contentBasedImageInput : contentBasedImageInput)); }