feat: 完成图片生成功能

This commit is contained in:
ccnetcore
2026-01-02 19:26:09 +08:00
parent 3f53eb14ab
commit 560a76558a
14 changed files with 251 additions and 134 deletions

View File

@@ -14,22 +14,22 @@ public class ImageStoreTaskAggregateRoot : FullAuditedAggregateRoot<Guid>
public string Prompt { get; set; }
/// <summary>
/// 参考图Base64
/// 参考图PrefixBase64带前缀如 data:image/png;base64,xxx
/// </summary>
[SugarColumn(IsJson = true)]
public List<string> ReferenceImagesBase64 { get; set; }
public List<string> ReferenceImagesPrefixBase64 { get; set; }
/// <summary>
/// 参考图url
/// </summary>
[SugarColumn(IsJson = true)]
public List<string> ReferenceImagesUrl { get; set; }
/// <summary>
/// 图片base64
/// 生成图片PrefixBase64带前缀如 data:image/png;base64,xxx
/// </summary>
public string? StoreBase64 { get; set; }
public string? StorePrefixBase64 { get; set; }
/// <summary>
/// 图片绝对路径
@@ -46,6 +46,34 @@ public class ImageStoreTaskAggregateRoot : FullAuditedAggregateRoot<Guid>
/// </summary>
public Guid UserId { get; set; }
/// <summary>
/// 模型id
/// </summary>
public string ModelId { get; set; }
/// <summary>
/// 错误信息
/// </summary>
[SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? ErrorInfo { get; set; }
/// <summary>
/// 发布状态
/// </summary>
public PublishStatusEnum PublishStatus { get; set; } = PublishStatusEnum.Unpublished;
/// <summary>
/// 分类标签
/// </summary>
[SugarColumn(IsJson = true)]
public List<string> Categories { get; set; } = new();
/// <summary>
/// 密钥id
/// </summary>
public Guid? TokenId { get; set; }
/// <summary>
/// 设置成功
/// </summary>

View File

@@ -984,11 +984,12 @@ public class AiGateWayManager : DomainService
var data = await chatService.GenerateContentAsync(modelDescribe, request, cancellationToken);
//解析json获取base64字符串
var imageBase64 = GeminiGenerateContentAcquirer.GetImageBase64(data);
var imageBase64 = GeminiGenerateContentAcquirer.GetImagePrefixBase64(data);
//远程调用上传接口将base64转换为URL
var httpClient = LazyServiceProvider.LazyGetRequiredService<IHttpClientFactory>().CreateClient();
var uploadUrl = $"https://ccnetcore.com/prod-api/ai-hub/ai-image/upload-base64";
// var uploadUrl = $"https://ccnetcore.com/prod-api/ai-hub/ai-image/upload-base64";
var uploadUrl = $"http://localhost:19001/api/app/ai-image/upload-base64";
var content = new StringContent(JsonSerializer.Serialize(imageBase64), Encoding.UTF8, "application/json");
var uploadResponse = await httpClient.PostAsync(uploadUrl, content, cancellationToken);
uploadResponse.EnsureSuccessStatusCode();
@@ -1020,7 +1021,7 @@ public class AiGateWayManager : DomainService
}
//设置存储base64和url
imageStoreTask.StoreBase64 = imageBase64;
imageStoreTask.StorePrefixBase64 = imageBase64;
imageStoreTask.SetSuccess(storeUrl);
await _imageStoreTaskRepository.UpdateAsync(imageStoreTask);
}

View File

@@ -21,6 +21,11 @@ public class TokenValidationResult
/// Token Id
/// </summary>
public Guid TokenId { get; set; }
/// <summary>
/// token
/// </summary>
public string Token { get; set; }
}
public class TokenManager : DomainService
@@ -39,25 +44,36 @@ public class TokenManager : DomainService
/// <summary>
/// 验证Token并返回用户Id和TokenId
/// </summary>
/// <param name="token">Token密钥</param>
/// <param name="tokenOrId">Token密钥或者TokenId</param>
/// <param name="modelId">模型Id用于判断是否是尊享模型需要检查额度</param>
/// <returns>Token验证结果</returns>
public async Task<TokenValidationResult> ValidateTokenAsync(string? token, string? modelId = null)
public async Task<TokenValidationResult> ValidateTokenAsync(object tokenOrId, string? modelId = null)
{
if (token is null)
if (tokenOrId is null)
{
throw new UserFriendlyException("当前请求未包含token", "401");
}
if (!token.StartsWith("yi-"))
TokenAggregateRoot entity;
if (tokenOrId is Guid tokenId)
{
throw new UserFriendlyException("当前请求token非法", "401");
entity = await _tokenRepository._DbQueryable
.Where(x => x.Id == tokenId)
.FirstAsync();
}
var entity = await _tokenRepository._DbQueryable
.Where(x => x.Token == token)
.FirstAsync();
else
{
var tokenStr = tokenOrId.ToString();
if (!tokenStr.StartsWith("yi-"))
{
throw new UserFriendlyException("当前请求token非法", "401");
}
entity = await _tokenRepository._DbQueryable
.Where(x => x.Token == tokenStr)
.FirstAsync();
}
if (entity is null)
{
throw new UserFriendlyException("当前请求token无效", "401");
@@ -90,7 +106,8 @@ public class TokenManager : DomainService
return new TokenValidationResult
{
UserId = entity.UserId,
TokenId = entity.Id
TokenId = entity.Id,
Token = entity.Token
};
}