mirror of https://github.com/mindoc-org/mindoc.git
优化导入文档中链接处理
parent
e729e35abb
commit
94faf856f7
|
@ -593,7 +593,7 @@ func (book *Book) ImportBook(zipPath string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
//当导入结束后,删除临时文件
|
//当导入结束后,删除临时文件
|
||||||
defer os.RemoveAll(tempPath)
|
//defer os.RemoveAll(tempPath)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
//如果当前目录下只有一个目录,则重置根目录
|
//如果当前目录下只有一个目录,则重置根目录
|
||||||
|
@ -660,7 +660,9 @@ func (book *Book) ImportBook(zipPath string) error {
|
||||||
imageUrl := strings.Replace(string(originalImageUrl), "\\", "/", -1)
|
imageUrl := strings.Replace(string(originalImageUrl), "\\", "/", -1)
|
||||||
|
|
||||||
//如果是本地路径,则需要将图片复制到项目目录
|
//如果是本地路径,则需要将图片复制到项目目录
|
||||||
if !strings.HasPrefix(imageUrl, "http://") && !strings.HasPrefix(imageUrl, "https://") {
|
if !strings.HasPrefix(imageUrl, "http://") &&
|
||||||
|
!strings.HasPrefix(imageUrl, "https://") &&
|
||||||
|
!strings.HasPrefix(imageUrl,"ftp://") {
|
||||||
//如果路径中存在参数
|
//如果路径中存在参数
|
||||||
if l := strings.Index(imageUrl,"?"); l > 0 {
|
if l := strings.Index(imageUrl,"?"); l > 0 {
|
||||||
imageUrl = imageUrl[:l]
|
imageUrl = imageUrl[:l]
|
||||||
|
@ -707,15 +709,26 @@ func (book *Book) ImportBook(zipPath string) error {
|
||||||
|
|
||||||
linkRegexp := regexp.MustCompile(`\[(.*?)\]\((.*?)\)`)
|
linkRegexp := regexp.MustCompile(`\[(.*?)\]\((.*?)\)`)
|
||||||
|
|
||||||
|
//处理链接
|
||||||
doc.Markdown = linkRegexp.ReplaceAllStringFunc(doc.Markdown, func(link string) string {
|
doc.Markdown = linkRegexp.ReplaceAllStringFunc(doc.Markdown, func(link string) string {
|
||||||
links := linkRegexp.FindAllStringSubmatch(link, -1)
|
links := linkRegexp.FindAllStringSubmatch(link, -1)
|
||||||
originalLink := links[0][2]
|
originalLink := links[0][2]
|
||||||
|
var linkPath string
|
||||||
|
var err error
|
||||||
|
//如果是从根目录开始,
|
||||||
|
if strings.HasPrefix(originalLink,"/") {
|
||||||
|
linkPath,err = filepath.Abs(filepath.Join(tempPath,originalLink))
|
||||||
|
}else if strings.HasPrefix(originalLink, "./"){
|
||||||
|
linkPath, err = filepath.Abs(filepath.Join(filepath.Dir(path), originalLink[1:]))
|
||||||
|
}else{
|
||||||
|
linkPath, err = filepath.Abs(filepath.Join(filepath.Dir(path), originalLink))
|
||||||
|
}
|
||||||
|
|
||||||
linkPath, err := filepath.Abs(filepath.Join(filepath.Dir(path), originalLink))
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
//如果本地存在该链接
|
//如果本地存在该链接
|
||||||
if filetil.FileExists(linkPath) {
|
if filetil.FileExists(linkPath) {
|
||||||
ext := filepath.Ext(linkPath)
|
ext := filepath.Ext(linkPath)
|
||||||
|
beego.Info("当前后缀 -> ",ext)
|
||||||
//如果链接是Markdown文件,则生成文档标识,否则,将目标文件复制到项目目录
|
//如果链接是Markdown文件,则生成文档标识,否则,将目标文件复制到项目目录
|
||||||
if strings.EqualFold(ext, ".md") || strings.EqualFold(ext, ".markdown") {
|
if strings.EqualFold(ext, ".md") || strings.EqualFold(ext, ".markdown") {
|
||||||
docIdentify := strings.Replace(strings.TrimPrefix(strings.Replace(linkPath, "\\", "/", -1), tempPath+"/"), "/", "-", -1)
|
docIdentify := strings.Replace(strings.TrimPrefix(strings.Replace(linkPath, "\\", "/", -1), tempPath+"/"), "/", "-", -1)
|
||||||
|
@ -726,6 +739,7 @@ func (book *Book) ImportBook(zipPath string) error {
|
||||||
docIdentify = strings.TrimSuffix(docIdentify, "-README.md")
|
docIdentify = strings.TrimSuffix(docIdentify, "-README.md")
|
||||||
|
|
||||||
link = strings.TrimSuffix(link, originalLink+")") + conf.URLFor("DocumentController.Read", ":key", book.Identify, ":id", docIdentify) + ")"
|
link = strings.TrimSuffix(link, originalLink+")") + conf.URLFor("DocumentController.Read", ":key", book.Identify, ":id", docIdentify) + ")"
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
dstPath := filepath.Join(conf.WorkingDirectory, "uploads", time.Now().Format("200601"), originalLink)
|
dstPath := filepath.Join(conf.WorkingDirectory, "uploads", time.Now().Format("200601"), originalLink)
|
||||||
|
|
||||||
|
@ -736,6 +750,8 @@ func (book *Book) ImportBook(zipPath string) error {
|
||||||
link = strings.TrimSuffix(link, originalLink+")") + tempLink + ")"
|
link = strings.TrimSuffix(link, originalLink+")") + tempLink + ")"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
beego.Info("文件不存在 ->",linkPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -151,12 +151,16 @@ func AbsolutePath(p string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileExists reports whether the named file or directory exists.
|
// FileExists reports whether the named file or directory exists.
|
||||||
func FileExists(name string) bool {
|
func FileExists(path string) bool {
|
||||||
if _, err := os.Stat(name); err != nil {
|
_, err := os.Stat(path)
|
||||||
return false
|
if err == nil {
|
||||||
}else{
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func FormatBytes(size int64) string {
|
func FormatBytes(size int64) string {
|
||||||
|
|
Loading…
Reference in New Issue