mirror of https://gitee.com/godoos/godoos.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.0 KiB
113 lines
3.0 KiB
/*
|
|
* GodoOS - A lightweight cloud desktop
|
|
* Copyright (C) 2024 https://godoos.com
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 2.1 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package convert
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
const maxBytes = 1024 << 20 // 1GB
|
|
|
|
type Res struct {
|
|
Status int
|
|
Data string
|
|
}
|
|
|
|
// Convert 函数根据文件类型,将文件内容转换为字符串格式。
|
|
// 支持的文件类型包括:.doc, .docx, .odt, .pdf, .csv, .xls, .xlsx, .tsv,
|
|
// .pptx, .rtf, .epub, .xml, .xhtml, .html, .htm, .jpg, .jpeg, .jpe, .jfif,
|
|
// .jfif-tbnl, .png, .gif, .bmp, .webp, .tif, .tiff, .txt, .md。
|
|
// 如果文件以 http 开头,将直接调用 ConvertHttp 函数进行处理。
|
|
// 参数:
|
|
//
|
|
// filename string - 文件名或文件URL。
|
|
//
|
|
// 返回值:
|
|
//
|
|
// Res - 包含转换结果的状态码和数据。
|
|
func Convert(filename string) Res {
|
|
//libs.InitConvertDir()
|
|
// 检查文件名是否以 http 开头,是则调用 ConvertHttp 处理
|
|
if strings.HasPrefix(filename, "http") {
|
|
return ConvertHttp(filename)
|
|
}
|
|
// 尝试打开文件
|
|
r, err := os.Open(filename)
|
|
if err != nil {
|
|
// 打开文件失败,返回错误信息
|
|
return Res{
|
|
Status: 201,
|
|
Data: fmt.Sprintf("error opening file: %v", err),
|
|
}
|
|
|
|
}
|
|
// 确保文件在函数返回前被关闭
|
|
defer r.Close()
|
|
|
|
// 获取文件扩展名,并转为小写
|
|
ext := strings.ToLower(path.Ext(filename))
|
|
|
|
var body string
|
|
// 根据文件扩展名,调用相应的转换函数
|
|
switch ext {
|
|
case ".doc":
|
|
body, err = ConvertDoc(r)
|
|
case ".docx":
|
|
body, err = ConvertDocx(r)
|
|
case ".odt":
|
|
body, err = ConvertODT(r)
|
|
// .pages 类型文件的处理暂不支持
|
|
// case ".pages":
|
|
// return "application/vnd.apple.pages"
|
|
case ".pdf":
|
|
body, err = ConvertPDF(r)
|
|
case ".csv", ".xls", ".xlsx", ".tsv":
|
|
body, err = ConvertXlsx(r)
|
|
case ".pptx":
|
|
body, err = ConvertPptx(r)
|
|
case ".rtf":
|
|
body, err = ConvertRTF(r)
|
|
case ".epub":
|
|
body, err = ConvetEpub(r)
|
|
case ".xml":
|
|
body, err = ConvertXML(r)
|
|
case ".xhtml", ".html", ".htm":
|
|
body, err = ConvertHTML(r)
|
|
case ".jpg", ".jpeg", ".jpe", ".jfif", ".jfif-tbnl", ".png", ".gif", ".bmp", ".webp", ".tif", ".tiff":
|
|
body, err = ConvertImage(r)
|
|
case ".md":
|
|
body, err = ConvertMd(r)
|
|
case ".txt":
|
|
body, err = ConvertTxt(r)
|
|
}
|
|
|
|
// 转换过程中若发生错误,返回错误信息
|
|
if err != nil {
|
|
return Res{
|
|
Status: 204,
|
|
Data: fmt.Sprintf("error opening file: %v", err),
|
|
}
|
|
}
|
|
return Res{
|
|
Status: 0,
|
|
Data: body,
|
|
}
|
|
}
|
|
|