增加项目导出目录配置,可自定义导出的缓存目录

pull/358/head
lifei6671 2018-07-11 11:30:48 +08:00
parent 449fecd4eb
commit ebf36e6146
6 changed files with 24 additions and 10 deletions

View File

@ -13,7 +13,7 @@ beegoserversessionkey=123456
########Session储存方式############## ########Session储存方式##############
#以文件方式储存 #以文件方式储存
sessionprovider=file sessionprovider=file
sessionproviderconfig=./logs sessionproviderconfig=./runtime/session
#以redis方式储存 #以redis方式储存
#sessionprovider=redis #sessionprovider=redis
#sessionproviderconfig=127.0.0.1:6379 #sessionproviderconfig=127.0.0.1:6379
@ -73,14 +73,19 @@ mail_expired=30
#加密类型NONE 无认证、SSL 加密、LOGIN 普通用户登录 #加密类型NONE 无认证、SSL 加密、LOGIN 普通用户登录
secure=LOGIN secure=LOGIN
###############配置PDF生成工具地址################### ###############配置导出项目###################
#同一个项目同时运行导出程序的并行数量取值1-4之间取值越大导出速度越快越占用资源 #同一个项目同时运行导出程序的并行数量取值1-4之间取值越大导出速度越快越占用资源
export_process_num=1 export_process_num=1
#并发导出的项目限制指同一时间限制的导出项目数量如果为0则不限制。设置的越大越占用资源 #并发导出的项目限制指同一时间限制的导出项目数量如果为0则不限制。设置的越大越占用资源
export_limit_num=1 export_limit_num=1
#指同时等待导出的任务数量 #指同时等待导出的任务数量
export_queue_limit_num=100 export_queue_limit_num=100
#导出项目的缓存目录配置
export_output_path=./runtime/cache
###############配置CDN加速################## ###############配置CDN加速##################
cdn= cdn=
cdnjs= cdnjs=

View File

@ -6,6 +6,7 @@ import (
"github.com/astaxie/beego" "github.com/astaxie/beego"
"strconv" "strconv"
"path/filepath"
) )
// 登录用户的Session名 // 登录用户的Session名
@ -65,7 +66,7 @@ var (
var ( var (
ConfigurationFile = "./conf/app.conf" ConfigurationFile = "./conf/app.conf"
WorkingDirectory = "./" WorkingDirectory = "./"
LogFile = "./logs" LogFile = "./runtime/logs"
BaseUrl = "" BaseUrl = ""
) )
@ -90,6 +91,7 @@ func GetTokenSize() int {
//获取默认文档封面. //获取默认文档封面.
func GetDefaultCover() string { func GetDefaultCover() string {
return URLForWithCdnImage(beego.AppConfig.DefaultString("cover", "/static/images/book.jpg")) return URLForWithCdnImage(beego.AppConfig.DefaultString("cover", "/static/images/book.jpg"))
} }
@ -162,6 +164,12 @@ func GetExportQueueLimitNum() int {
} }
return exportQueueLimitNum return exportQueueLimitNum
} }
//默认导出项目的缓存目录
func GetExportOutputPath() string {
exportOutputPath := filepath.Join(beego.AppConfig.DefaultString("export_output_path", filepath.Join(WorkingDirectory,"cache")),"books")
return exportOutputPath
}
//判断是否是允许商城的文件类型. //判断是否是允许商城的文件类型.
func IsAllowUploadFileExt(ext string) bool { func IsAllowUploadFileExt(ext string) bool {

View File

@ -707,7 +707,7 @@ func (c *BookController) Release() {
models.NewBook().ReleaseContent(bookId) models.NewBook().ReleaseContent(bookId)
//当文档发布后,需要删除已缓存的转换项目 //当文档发布后,需要删除已缓存的转换项目
outputPath := filepath.Join(beego.AppConfig.DefaultString("book_output_path", "cache"), strconv.Itoa(bookId)) outputPath := filepath.Join(conf.GetExportOutputPath(), strconv.Itoa(bookId))
os.RemoveAll(outputPath) os.RemoveAll(outputPath)
}(identify) }(identify)

View File

@ -858,7 +858,7 @@ func (c *DocumentController) Export() {
return return
} }
outputPath := filepath.Join(conf.WorkingDirectory, "uploads", "books", strconv.Itoa(bookResult.BookId)) outputPath := filepath.Join(conf.GetExportOutputPath(), strconv.Itoa(bookResult.BookId))
pdfpath := filepath.Join(outputPath, "book.pdf") pdfpath := filepath.Join(outputPath, "book.pdf")
epubpath := filepath.Join(outputPath, "book.epub") epubpath := filepath.Join(outputPath, "book.epub")
@ -1092,7 +1092,7 @@ func (c *DocumentController) DeleteHistory() {
c.JsonResult(0, "ok") c.JsonResult(0, "ok")
} }
//通过文档历史恢复文档
func (c *DocumentController) RestoreHistory() { func (c *DocumentController) RestoreHistory() {
c.Prepare() c.Prepare()

View File

@ -193,13 +193,11 @@ func (convert *Converter) Convert() (err error) {
group := sync.WaitGroup{} group := sync.WaitGroup{}
for { for {
action, isClosed := <-convert.process action, isClosed := <-convert.process
fmt.Println(action,isClosed)
if action == nil && !isClosed { if action == nil && !isClosed {
break; break;
} }
group.Add(1) group.Add(1)
<- convert.limitChan <- convert.limitChan
fmt.Println("正在处理")
go func(group *sync.WaitGroup) { go func(group *sync.WaitGroup) {
action() action()
group.Done() group.Done()

View File

@ -216,9 +216,12 @@ func (m *BookResult) ToBookResult(book Book) *BookResult {
//后台转换 //后台转换
func BackgroupConvert(sessionId string,bookResult *BookResult){ func BackgroupConvert(sessionId string,bookResult *BookResult){
exportLimitWorkerChannel.LoadOrStore(bookResult.Identify, func() { err := exportLimitWorkerChannel.LoadOrStore(bookResult.Identify, func() {
bookResult.Converter(sessionId) bookResult.Converter(sessionId)
}) })
if err != nil {
beego.Error("将导出任务加入任务队列失败 -> ",err)
}
exportLimitWorkerChannel.Start() exportLimitWorkerChannel.Start()
} }
@ -227,7 +230,7 @@ func (m *BookResult) Converter(sessionId string) (ConvertBookResult, error) {
convertBookResult := ConvertBookResult{} convertBookResult := ConvertBookResult{}
outputPath := filepath.Join(conf.WorkingDirectory, "uploads", "books", strconv.Itoa(m.BookId)) outputPath := filepath.Join(conf.GetExportOutputPath(), strconv.Itoa(m.BookId))
viewPath := beego.BConfig.WebConfig.ViewsPath viewPath := beego.BConfig.WebConfig.ViewsPath
pdfpath := filepath.Join(outputPath, "book.pdf") pdfpath := filepath.Join(outputPath, "book.pdf")