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

如何使用Alamofire将[UInt8]字节数据上传至服务器?

正确用Alamofire上传[UInt8]字节数据的方法

你的问题出在把字节数组放到JSON参数里进行编码——这样Alamofire会把[UInt8]转换成JSON格式的数字数组(比如[1,2,3]),但你的服务器要求的Content-Type是自定义的二进制类型,显然不是JSON,所以服务器无法正确解析你的请求。

下面是两种正确的实现方式:

方式一:直接发送原始二进制数据(推荐)

先把[UInt8]转换成Data类型,然后用Alamofire的upload方法或者直接设置请求体来发送:

步骤1:转换字节数组到Data

// 假设这是你的[UInt8]字节数据
let byteData: [UInt8] = [0x10, 0x20, 0x30, 0x40]
let requestData = Data(byteData)

步骤2:用upload方法发送(更符合上传场景)

let headers: HTTPHeaders = ["Content-Type": "application/vnd.awallet-signed-orders-v0"]

Alamofire.upload(
    requestData,
    to: query,
    method: .put,
    headers: headers
).responseJSON { response in
    print("Request: \(String(describing: response.request))")
    print("Response: \(String(describing: response.response))")
    // 这里添加你的响应处理逻辑
}

或者用request方法直接设置HTTPBody

如果你更习惯用request方法,也可以直接设置请求体:

let headers: HTTPHeaders = ["Content-Type": "application/vnd.awallet-signed-orders-v0"]

var urlRequest = URLRequest(url: URL(string: query)!)
urlRequest.httpMethod = "PUT"
urlRequest.allHTTPHeaderFields = headers.dictionary
urlRequest.httpBody = requestData

Alamofire.request(urlRequest).responseJSON { response in
    print("Request: \(String(describing: response.request))")
    print("Response: \(String(describing: response.response))")
    // 处理响应
}

方式二:如果服务器要求字节数据放在JSON字段中

如果你的服务器确实需要把字节数据封装在JSON的某个字段里(比如data字段),那你需要先把字节数组转换成Base64编码的字符串,再放入参数中:

let byteData: [UInt8] = [0x10, 0x20, 0x30, 0x40]
let requestData = Data(byteData)
let base64String = requestData.base64EncodedString()

let parameters: Parameters = ["data": base64String]
let headers: HTTPHeaders = ["Content-Type": "application/vnd.awallet-signed-orders-v0"]

Alamofire.request(
    query,
    method: .put,
    parameters: parameters,
    encoding: JSONEncoding.default,
    headers: headers
).responseJSON { response in
    print("Request: \(String(describing: response.request))")
    print("Response: \(String(describing: response.response))")
    // 处理响应
}

关键说明

  • 你的原始代码错误地使用了JSONEncoding.default来编码字节数组,这会把二进制数据转换成JSON数组,完全不符合服务器的格式要求。
  • 优先选择方式一,因为你的Content-Type是自定义的二进制类型,直接发送原始字节流是最匹配的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:37