@@ -211,51 +211,8 @@ func (is *ImageStreamer) getImageDescriptor(ref name.Reference, options []remote
211211
212212// getImageDescriptorWithPlatform 获取指定平台的镜像描述符
213213func (is * ImageStreamer ) getImageDescriptorWithPlatform (ref name.Reference , options []remote.Option , platform string ) (* remote.Descriptor , error ) {
214- if isCacheEnabled () {
215- var reference string
216- if tagged , ok := ref .(name.Tag ); ok {
217- reference = tagged .TagStr ()
218- } else if digested , ok := ref .(name.Digest ); ok {
219- reference = digested .DigestStr ()
220- }
221-
222- if reference != "" {
223- cacheKey := buildManifestCacheKeyWithPlatform (ref .Context ().String (), reference , platform )
224- if cachedItem := globalCache .Get (cacheKey ); cachedItem != nil {
225- desc := & remote.Descriptor {
226- Manifest : cachedItem .Data ,
227- }
228- log .Printf ("使用缓存的manifest: %s (平台: %s)" , ref .String (), platform )
229- return desc , nil
230- }
231- }
232- }
233-
234- desc , err := remote .Get (ref , options ... )
235- if err != nil {
236- return nil , err
237- }
238-
239- if isCacheEnabled () {
240- var reference string
241- if tagged , ok := ref .(name.Tag ); ok {
242- reference = tagged .TagStr ()
243- } else if digested , ok := ref .(name.Digest ); ok {
244- reference = digested .DigestStr ()
245- }
246-
247- if reference != "" {
248- cacheKey := buildManifestCacheKeyWithPlatform (ref .Context ().String (), reference , platform )
249- ttl := getManifestTTL (reference )
250- headers := map [string ]string {
251- "Docker-Content-Digest" : desc .Digest .String (),
252- }
253- globalCache .Set (cacheKey , desc .Manifest , string (desc .MediaType ), headers , ttl )
254- log .Printf ("缓存manifest: %s (平台: %s, TTL: %v)" , ref .String (), platform , ttl )
255- }
256- }
257-
258- return desc , nil
214+ // 直接从网络获取完整的descriptor,确保对象完整性
215+ return remote .Get (ref , options ... )
259216}
260217
261218// StreamImageToGin 流式响应到Gin
@@ -503,7 +460,7 @@ func (is *ImageStreamer) streamSingleImageForBatch(ctx context.Context, tarWrite
503460
504461 switch desc .MediaType {
505462 case types .OCIImageIndex , types .DockerManifestList :
506- // 处理多架构镜像,复用单个下载的逻辑
463+ // 处理多架构镜像
507464 img , err := is .selectPlatformImage (desc , options )
508465 if err != nil {
509466 return nil , nil , fmt .Errorf ("选择平台镜像失败: %w" , err )
@@ -574,6 +531,8 @@ func (is *ImageStreamer) streamSingleImageForBatch(ctx context.Context, tarWrite
574531 return manifest , repositories , nil
575532}
576533
534+
535+
577536// selectPlatformImage 从多架构镜像中选择合适的平台镜像
578537func (is * ImageStreamer ) selectPlatformImage (desc * remote.Descriptor , options * StreamOptions ) (v1.Image , error ) {
579538 index , err := desc .ImageIndex ()
0 commit comments