package api import ( "ZhenTuLocalPassiveAdapter/dto" "bytes" "fmt" "io" "net/http" "os" ) func UploadTaskFile(task dto.Task, file dto.FileObject) error { url, err := QueryUploadUrlForTask(task.TaskID) if err != nil { return err } if err := OssUpload(url, file.URL); err != nil { return err } return nil } func OssUpload(url, filePath string) error { // 使用 http put 请求上传文件 file, err := os.Open(filePath) defer os.Remove(filePath) defer file.Close() if err != nil { return err } fileBytes, err := io.ReadAll(file) if err != nil { return err } req, err := http.NewRequest("PUT", url, bytes.NewBuffer(fileBytes)) if err != nil { return err } req.Header.Set("Content-Length", fmt.Sprintf("%d", len(fileBytes))) client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return fmt.Errorf("upload failed with status code %d", resp.StatusCode) } return nil }