mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Make Release Download URLs predictable (#23891)
As promised in #23817, I have this made a PR to make Release Download URLs predictable. It currently follows the schema `<repo>/releases/download/<tag>/<filename>`. this already works, but it is nowhere shown in the UI or the API. The Problem is, that it is currently possible to have multiple files with the same name (why do we even allow this) for a release. I had written some Code to check, if a Release has 2 or more files with the same Name. If yes, it uses the old `attachments/<uuid>` URlL if no it uses the new fancy URL. I had also changed `<repo>/releases/download/<tag>/<filename>` to directly serve the File instead of redirecting, so people who who use automatic update checker don't end up with the `attachments/<uuid>` URL. Fixes #10919 --------- Co-authored-by: a1012112796 <1012112796@qq.com>
This commit is contained in:
		| @@ -18,17 +18,18 @@ import ( | ||||
|  | ||||
| // Attachment represent a attachment of issue/comment/release. | ||||
| type Attachment struct { | ||||
| 	ID            int64  `xorm:"pk autoincr"` | ||||
| 	UUID          string `xorm:"uuid UNIQUE"` | ||||
| 	RepoID        int64  `xorm:"INDEX"`           // this should not be zero | ||||
| 	IssueID       int64  `xorm:"INDEX"`           // maybe zero when creating | ||||
| 	ReleaseID     int64  `xorm:"INDEX"`           // maybe zero when creating | ||||
| 	UploaderID    int64  `xorm:"INDEX DEFAULT 0"` // Notice: will be zero before this column added | ||||
| 	CommentID     int64 | ||||
| 	Name          string | ||||
| 	DownloadCount int64              `xorm:"DEFAULT 0"` | ||||
| 	Size          int64              `xorm:"DEFAULT 0"` | ||||
| 	CreatedUnix   timeutil.TimeStamp `xorm:"created"` | ||||
| 	ID                int64  `xorm:"pk autoincr"` | ||||
| 	UUID              string `xorm:"uuid UNIQUE"` | ||||
| 	RepoID            int64  `xorm:"INDEX"`           // this should not be zero | ||||
| 	IssueID           int64  `xorm:"INDEX"`           // maybe zero when creating | ||||
| 	ReleaseID         int64  `xorm:"INDEX"`           // maybe zero when creating | ||||
| 	UploaderID        int64  `xorm:"INDEX DEFAULT 0"` // Notice: will be zero before this column added | ||||
| 	CommentID         int64 | ||||
| 	Name              string | ||||
| 	DownloadCount     int64              `xorm:"DEFAULT 0"` | ||||
| 	Size              int64              `xorm:"DEFAULT 0"` | ||||
| 	CreatedUnix       timeutil.TimeStamp `xorm:"created"` | ||||
| 	CustomDownloadURL string             `xorm:"-"` | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| @@ -57,6 +58,10 @@ func (a *Attachment) RelativePath() string { | ||||
|  | ||||
| // DownloadURL returns the download url of the attached file | ||||
| func (a *Attachment) DownloadURL() string { | ||||
| 	if a.CustomDownloadURL != "" { | ||||
| 		return a.CustomDownloadURL | ||||
| 	} | ||||
|  | ||||
| 	return setting.AppURL + "attachments/" + url.PathEscape(a.UUID) | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user