Ejemplo n.º 1
0
        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));
 }
Ejemplo n.º 3
0
        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
                    }));
                }
            }
        }
Ejemplo n.º 4
0
 public async Task <Result <MongoDBImageSaveOutput> > SaveImageToMongoDBByContentAsync(string host, ContentBasedImageSaveInput contentBasedImageInput)
 {
     return(await _imageService.SaveImageToMongoDBAsync(hostName : host, contentBasedImageInput : contentBasedImageInput));
 }