70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/Xhofe/alist/alidrive"
|
|
"github.com/Xhofe/alist/conf"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/patrickmn/go-cache"
|
|
log "github.com/sirupsen/logrus"
|
|
"strings"
|
|
)
|
|
|
|
func Get(c *gin.Context) {
|
|
var get alidrive.GetReq
|
|
if err := c.ShouldBindJSON(&get); err != nil {
|
|
c.JSON(200,metaResponse(400,"Bad Request"))
|
|
return
|
|
}
|
|
log.Debugf("get:%v",get)
|
|
// cache
|
|
cacheKey:=fmt.Sprintf("%s-%s","g",get.FileId)
|
|
if conf.Conf.Cache.Enable {
|
|
file,exist:=conf.Cache.Get(cacheKey)
|
|
if exist {
|
|
log.Debugf("使用了缓存:%s",cacheKey)
|
|
c.JSON(200,dataResponse(file))
|
|
return
|
|
}
|
|
}
|
|
file,err:=alidrive.GetFile(get.FileId)
|
|
if err !=nil {
|
|
c.JSON(200,metaResponse(500,err.Error()))
|
|
return
|
|
}
|
|
paths,err:=alidrive.GetPaths(get.FileId)
|
|
if err!=nil {
|
|
c.JSON(200,metaResponse(500,err.Error()))
|
|
return
|
|
}
|
|
file.Paths=*paths
|
|
if conf.Conf.Cache.Enable {
|
|
conf.Cache.Set(cacheKey,file,cache.DefaultExpiration)
|
|
}
|
|
c.JSON(200,dataResponse(file))
|
|
}
|
|
|
|
func Down(c *gin.Context) {
|
|
fileIdParam:=c.Param("file_id")
|
|
log.Debugf("down:%s",fileIdParam)
|
|
fileId:=strings.Split(fileIdParam,"/")[1]
|
|
cacheKey:=fmt.Sprintf("%s-%s","d",fileId)
|
|
if conf.Conf.Cache.Enable {
|
|
downloadUrl,exist:=conf.Cache.Get(cacheKey)
|
|
if exist {
|
|
log.Debugf("使用了缓存:%s",cacheKey)
|
|
c.Redirect(301,downloadUrl.(string))
|
|
return
|
|
}
|
|
}
|
|
file,err:=alidrive.GetFile(fileId)
|
|
if err != nil {
|
|
c.JSON(200, metaResponse(500,err.Error()))
|
|
return
|
|
}
|
|
if conf.Conf.Cache.Enable {
|
|
conf.Cache.Set(cacheKey,file.DownloadUrl,cache.DefaultExpiration)
|
|
}
|
|
c.Redirect(301,file.DownloadUrl)
|
|
return
|
|
} |