修复导入文件中图片存在参数时无法导入的BUG

This commit is contained in:
Minho 2018-03-26 22:39:16 +08:00
parent 297a7a1b11
commit dc214bc038
2 changed files with 61 additions and 6 deletions

View File

@ -545,6 +545,11 @@ func (book *Book) ImportBook(zipPath string) error {
//如果是本地路径,则需要将图片复制到项目目录
if !strings.HasPrefix(imageUrl, "http://") && !strings.HasPrefix(imageUrl, "https://") {
//如果路径中存在参数
if l := strings.Index(imageUrl,"?"); l > 0 {
imageUrl = imageUrl[:l]
}
if strings.HasPrefix(imageUrl, "/") {
imageUrl = filepath.Join(tempPath, imageUrl)
} else if strings.HasPrefix(imageUrl, "./") {
@ -560,7 +565,7 @@ func (book *Book) ImportBook(zipPath string) error {
if filetil.FileExists(imageUrl) {
filetil.CopyFile(imageUrl, dstFile)
imageUrl = strings.TrimPrefix(dstFile, conf.WorkingDirectory)
imageUrl = strings.TrimPrefix(strings.Replace(dstFile,"\\","/",-1), strings.Replace(conf.WorkingDirectory,"\\","/",-1))
if !strings.HasPrefix(imageUrl, "/") && !strings.HasPrefix(imageUrl, "\\") {
imageUrl = "/" + imageUrl
@ -642,7 +647,7 @@ func (book *Book) ImportBook(zipPath string) error {
}
}
doc.DocumentName = docName
doc.DocumentName = strings.TrimSpace(docName)
parentId := 0

View File

@ -20,6 +20,9 @@ import (
"github.com/lifei6671/mindoc/utils/filetil"
"github.com/lifei6671/mindoc/utils/ziptil"
"gopkg.in/russross/blackfriday.v2"
"regexp"
"github.com/lifei6671/mindoc/utils/cryptil"
"github.com/lifei6671/mindoc/utils/requests"
)
type BookResult struct {
@ -397,7 +400,7 @@ func (m *BookResult) ExportMarkdown(sessionId string) (string, error) {
defer os.RemoveAll(tempOutputPath)
err := exportMarkdown(tempOutputPath, 0, m.BookId)
err := exportMarkdown(tempOutputPath, 0, m.BookId,tempOutputPath)
if err != nil {
return "", err
@ -410,7 +413,7 @@ func (m *BookResult) ExportMarkdown(sessionId string) (string, error) {
return outputPath, nil
}
func exportMarkdown(p string, parentId int, bookId int) error {
func exportMarkdown(p string, parentId int, bookId int,baseDir string) error {
o := orm.NewOrm()
var docs []*Document
@ -449,12 +452,59 @@ func exportMarkdown(p string, parentId int, bookId int) error {
os.MkdirAll(dirPath, 0766)
if err := ioutil.WriteFile(docPath, []byte(doc.Markdown), 0644); err != nil {
re := regexp.MustCompile(`!\[(.*?)\]\((.*?)\)`)
//处理文档中图片
markdown := re.ReplaceAllStringFunc(doc.Markdown, func(image string) string {
images := re.FindAllSubmatch([]byte(image), -1)
if len(images) <= 0 || len(images[0]) < 3 {
return image
}
originalImageUrl := string(images[0][2])
imageUrl := strings.Replace(string(originalImageUrl), "\\", "/", -1)
//如果是本地路径,则需要将图片复制到项目目录
if strings.HasPrefix(imageUrl, "http://") || strings.HasPrefix(imageUrl, "https://") {
imageExt := cryptil.Md5Crypt(imageUrl) + filepath.Ext(imageUrl)
dstFile := filepath.Join(baseDir, "uploads", time.Now().Format("200601"), imageExt)
if err := requests.DownloadAndSaveFile(imageUrl, dstFile); err == nil {
imageUrl = strings.TrimPrefix(strings.Replace(dstFile, "\\", "/", -1), strings.Replace(baseDir, "\\", "/", -1))
if !strings.HasPrefix(imageUrl, "/") && !strings.HasPrefix(imageUrl, "\\") {
imageUrl = "/" + imageUrl
}
}
}else if strings.HasPrefix(imageUrl,"/"){
filetil.CopyFile(filepath.Join(conf.WorkingDirectory,imageUrl),filepath.Join(baseDir,imageUrl))
}
imageUrl = strings.Replace(strings.TrimSuffix(image, originalImageUrl+")")+imageUrl+")", "\\", "/", -1)
return imageUrl
})
linkRe := regexp.MustCompile(`\[(.*?)\]\((.*?)\)`)
markdown = linkRe.ReplaceAllStringFunc(markdown, func(link string) string {
links := linkRe.FindAllStringSubmatch(link, -1)
if len(links) > 0 && len(links[0]) >= 3 {
originalLink := links[0][2]
link = strings.TrimSuffix(link, originalLink+")") + strings.TrimPrefix(originalLink,conf.BaseUrl) + ")"
}
return link
})
if err := ioutil.WriteFile(docPath, []byte(markdown), 0644); err != nil {
beego.Error("导出Markdown失败=>", err)
return err
}
if subDocCount > 0 {
if err = exportMarkdown(dirPath, doc.DocumentId, bookId); err != nil {
if err = exportMarkdown(dirPath, doc.DocumentId, bookId,baseDir); err != nil {
return err
}
}