初始
This commit is contained in:
112
third/officeWeb365/office.go
Normal file
112
third/officeWeb365/office.go
Normal file
@ -0,0 +1,112 @@
|
||||
// @Author cory 2025/4/24 15:52:00
|
||||
package officeWeb365
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/tiger1103/gfast/v3/api/v1/common/coryCommon"
|
||||
"golang.org/x/net/context"
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func SendFile199(ctx context.Context, relativePath string, typeStr string) (err error, urlPath string) {
|
||||
//1、根据相对路径获取到文件信息
|
||||
filePath := coryCommon.FileToFunc(relativePath, 2)
|
||||
|
||||
fieldName := "file" // 表单字段名
|
||||
|
||||
// 获取文件名
|
||||
fileName := filepath.Base(filePath) // 自动获取 "222.xlsx"
|
||||
|
||||
// 打开文件
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 创建 multipart body
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
|
||||
// 创建文件字段(自动带文件名)
|
||||
part, err := writer.CreateFormFile(fieldName, fileName)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// 将文件内容复制进去
|
||||
_, err = io.Copy(part, file)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// 关闭 multipart writer
|
||||
err = writer.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
url := ""
|
||||
sip := "http://192.168.1.177:8188"
|
||||
switch typeStr {
|
||||
case "1":
|
||||
url = sip + "/api/doc/view/uploadfile"
|
||||
case "2":
|
||||
url = sip + "/OnlineEditing/GetPreviewUrl"
|
||||
case "3":
|
||||
url = sip + "/api/ppt/view/uploadfile"
|
||||
}
|
||||
|
||||
// 创建请求
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, body)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// 设置 multipart Content-Type
|
||||
req.Header.Set("Content-Type", writer.FormDataContentType())
|
||||
|
||||
// 发出请求
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return err, ""
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 读取响应
|
||||
respBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return errors.New("请求错误!"), ""
|
||||
}
|
||||
|
||||
// 解析响应 JSON
|
||||
var responseData ResponseData
|
||||
err = json.Unmarshal(respBody, &responseData)
|
||||
if err != nil {
|
||||
return errors.New(string(respBody)), ""
|
||||
}
|
||||
|
||||
// 输出结果
|
||||
if responseData.Code == 200 {
|
||||
return nil, strings.Replace(responseData.Data.ViewURL, sip, "", -1)
|
||||
} else {
|
||||
return errors.New("请求错误!"), ""
|
||||
}
|
||||
}
|
||||
|
||||
// ResponseData 定义响应数据的结构体
|
||||
type ResponseData struct {
|
||||
Code int `json:"code"`
|
||||
Data struct {
|
||||
RequestID string `json:"request_id"`
|
||||
ViewURL string `json:"view_url"`
|
||||
} `json:"data"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
Reference in New Issue
Block a user