You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift使用Alamofire上传文件到Pinata返回Invalid request format错误

问题核心原因

  • 编码类型不匹配:Pinata的pinFileToIPFS接口要求请求体为multipart/form-data格式,你当前使用JSONEncoding.default对参数做JSON编码,完全不符合接口格式要求,是触发Invalid request format报错的核心原因。
  • 手动设置Content-Type错误:Multipart请求的boundary参数会由Alamofire在构造请求时自动生成,你手动指定boundary会导致实际请求的分隔符和头声明的分隔符不匹配,接口无法正常解析请求体。
  • 请求构造方法错误:上传文件的multipart请求需要调用Alamofire的upload方法构造,你用普通的request方法无法正确构建文件上传的请求结构。

修正后的代码示例

// 假设你要上传的文件是Data类型,命名为fileData,文件名为uploadFile.png
let apiKey = "myAPIKey"
let secretApiKey = "mySecretApiKey"

AF.upload(multipartFormData: { multipartFormData in
    // 添加文件数据到表单
    multipartFormData.append(fileData, withName: "file", fileName: "uploadFile.png", mimeType: "image/png")
    // 如果需要额外的pinata元数据,可以再加这部分,不需要可以删掉
    let metadata = ["name": "你的文件名称", "keyvalues": ["customKey": "customValue"]]
    if let metadataData = try? JSONSerialization.data(withJSONObject: metadata) {
        multipartFormData.append(metadataData, withName: "pinataMetadata")
    }
}, to: "https://api.pinata.cloud/pinning/pinFileToIPFS",
          method: .post,
          headers: [
            "pinata_api_key": apiKey,
            "pinata_secret_api_key": secretApiKey
        ]).responseString { response in
    print("responseString responseee", response)
    switch response.result {
    case .success(let element):
        print(element)
    case .failure(let error):
        print("failure", error)
    }
}

额外注意事项

  • 如果上传的是其他格式文件,对应修改mimeType参数即可,比如普通文件用application/octet-stream,JSON文件用application/json。
  • 不需要手动添加Content-Type请求头,Alamofire会自动生成带正确boundary的multipart/form-data头。
  • 如果你之前的data参数是已经处理好的表单数据,直接删掉改用multipartFormData闭包构造参数即可。

内容的提问来源于stack exchange,提问作者user16525780

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 12:39:00