Asset upload API
资源上传
上传本地图片、音频或视频,获得可用于模型输入的 HTTPS URL。资源上传成功后保存 1 天(24 小时),到期自动删除,请及时使用或下载保存。
上传本地文件
服务端代码使用个人 FIREFLY_API_KEY;在线调用页面上传时使用当前登录态并自动选择可用 Key。请求只提交一个本地文件,成功后返回可直接用于模型请求的 URL。
复制任一语言代码运行,完成后会输出可直接用于模型请求的 URL。
package main
import (
"encoding/json"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
"path/filepath"
)
type asset struct { URL string `json:"url"` }
func main() {
filePath := "./reference.png"
file, err := os.Open(filePath)
if err != nil { panic(err) }
defer file.Close()
bodyReader, bodyWriter := io.Pipe()
form := multipart.NewWriter(bodyWriter)
go func() {
part, err := form.CreateFormFile("file", filepath.Base(filePath))
if err == nil { _, err = io.Copy(part, file) }
if closeErr := form.Close(); err == nil { err = closeErr }
_ = bodyWriter.CloseWithError(err)
}()
request, err := http.NewRequest(http.MethodPost, "https://api.fireflyfusion.ai/api/customer/v1/assets", bodyReader)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer "+os.Getenv("FIREFLY_API_KEY"))
request.Header.Set("Content-Type", form.FormDataContentType())
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
if response.StatusCode < 200 || response.StatusCode >= 300 {
message, _ := io.ReadAll(response.Body)
panic(string(message))
}
var result asset
if err := json.NewDecoder(response.Body).Decode(&result); err != nil { panic(err) }
fmt.Println(result.URL)
}返回结果
上传结果字段代码最终取得的文件信息
字段类型说明
idstring<uuid>资产 ID。kindstring enumimage、audio 或 video。content_typestring文件媒体类型。size_bytesinteger<int64>文件字节数。original_filenamestring本地文件名。expires_atstring<date-time>资源删除时间。urlstring<https-uri>可直接提交给模型的文件 URL。常见错误
状态处理
400没有提交文件、文件为空或文件格式不支持。401服务端调用时检查 API Key;在线调用时检查登录态和账户中是否存在可用的调用 Key。403API Key 没有调用权限,或当前 IP 不在该 Key 的允许范围内。413文件超过大小限制;错误信息会包含文件实际大小和允许上限。503存储暂时不可用;稍后重新提交文件。