文档目录

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 enumimageaudiovideo
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存储暂时不可用;稍后重新提交文件。