gpt4 book ai didi

ios - 在 Swift 中添加边界后,多部分表单数据 POST 上传图像不起作用

转载 作者:行者123 更新时间:2023-11-28 06:51:29 30 4
gpt4 key购买 nike

所以我尝试使用以下格式在 Swift 中执行多部分发布请求:

user_id 3232424234
photo *PHOTO DATA*

我按照本文底部所示设置了我的请求,但收到以下错误:

Optional(Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSUnderlyingError=0x7f86235cfe40 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={_kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=ENDPOINTURL, NSErrorFailingURLKey=ENDPOINTURL, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=The network connection was lost.})

这个错误对我来说似乎非常奇怪,因为我可以通过省略 POST 请求的边界要求来让它消失,但是服务器随后以 500 爆炸并让客户端知道它省略了边界要求,所以是的。我可能在 Swift 中做错了什么。下面是我提出请求的代码。让我知道是否需要更多信息,thx guru's of the world。

//Inputs in this scope are an "id" and a "photo"
let url = NSURL(string: "**URL**")
let boundary = NSUUID()
let request = NSMutableURLRequest(URL: url!)

request.HTTPMethod = "POST"
request.setValue("multipart/form-data; boundary=--\(boundary)", forHTTPHeaderField: "Content-Type")

let parameterBody:NSDictionary = [
"user_id": id,
]

let data:NSMutableData = NSMutableData()

parameterBody.enumerateKeysAndObjectsUsingBlock { (parameterKey: AnyObject, parameterValue: AnyObject, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
data.appendData(NSString(string: "--\(boundary)\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
data.appendData(NSString(string: "\(parameterKey) \(parameterValue)\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
}

data.appendData(NSString(string: "--\(boundary)\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
data.appendData(NSString(string: "photo").dataUsingEncoding(NSUTF8StringEncoding)!)
data.appendData(photo.imageData as! NSData)
data.appendData(NSString(string: "--\(boundary)--\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)

request.setValue("\(data.length)", forHTTPHeaderField: "Content-Length")

let task = NSURLSession.sharedSession().uploadTaskWithRequest(request, fromData: data) { (responseJSON: AnyObject?, response: NSURLResponse?, error: NSError?) -> Void in
//Here I handle the response and check for errors.
}

task.resume()

最佳答案

这里有很多问题:

  1. 边界应该是NSUUID().UUIDString

  2. 将边界添加到 Content-Type header 时,不应在此处添加 --

  3. 多部分请求的各个部分格式不正确。例如,您缺少 Content-Disposition

  4. 不重要,但不需要设置请求的Content-Length。这是为您完成的。

我建议您引用这个答案,它提供了如何形成多部分请求的示例:Upload image with parameters in Swift .或者考虑使用 Alamofire ,它会为您处理所有这一切。

关于ios - 在 Swift 中添加边界后,多部分表单数据 POST 上传图像不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771767/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com