mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	Download lfs in git and web workflow from minio/s3 directly (#16731)
This commit is contained in:
		@@ -11,6 +11,8 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/httpcache"
 | 
			
		||||
	"code.gitea.io/gitea/modules/lfs"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/storage"
 | 
			
		||||
	"code.gitea.io/gitea/routers/common"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -47,6 +49,16 @@ func ServeBlobOrLFS(ctx *context.Context, blob *git.Blob) error {
 | 
			
		||||
		if httpcache.HandleGenericETagCache(ctx.Req, ctx.Resp, `"`+pointer.Oid+`"`) {
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if setting.LFS.ServeDirect {
 | 
			
		||||
			//If we have a signed url (S3, object storage), redirect to this directly.
 | 
			
		||||
			u, err := storage.LFS.URL(pointer.RelativePath(), blob.Name())
 | 
			
		||||
			if u != nil && err == nil {
 | 
			
		||||
				ctx.Redirect(u.String())
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		lfsDataRc, err := lfs.ReadMetaObject(meta.Pointer)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ import (
 | 
			
		||||
	lfs_module "code.gitea.io/gitea/modules/lfs"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/storage"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang-jwt/jwt"
 | 
			
		||||
)
 | 
			
		||||
@@ -401,6 +402,13 @@ func buildObjectResponse(rc *requestContext, pointer lfs_module.Pointer, downloa
 | 
			
		||||
 | 
			
		||||
		if download {
 | 
			
		||||
			rep.Actions["download"] = &lfs_module.Link{Href: rc.DownloadLink(pointer), Header: header}
 | 
			
		||||
			if setting.LFS.ServeDirect {
 | 
			
		||||
				//If we have a signed url (S3, object storage), redirect to this directly.
 | 
			
		||||
				u, err := storage.LFS.URL(pointer.RelativePath(), pointer.Oid)
 | 
			
		||||
				if u != nil && err == nil {
 | 
			
		||||
					rep.Actions["download"] = &lfs_module.Link{Href: u.String(), Header: header}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if upload {
 | 
			
		||||
			rep.Actions["upload"] = &lfs_module.Link{Href: rc.UploadLink(pointer), Header: header}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user