gpt4 book ai didi

ios - 使用请求正文批量上传图片

转载 作者:可可西里 更新时间:2023-10-31 23:44:47 29 4
gpt4 key购买 nike

我试图将图像从 Swift 应用程序上传到基于 PHP 的服务器。我收集了一些相关代码并尝试使用它但上传不成功。以下是我使用附加请求正文上传图像的函数,以及我得到的响应。

注意:服务器正在运行,我已尝试使用RestClient 应用 进行测试。它在 multipart/form-data 中接受并在 body 中接受所有请求。

上传功能

func imageUploadRequest(){
let parameters = [
"activity1": selectedActivity+1,
"activity2": selectedActivity2+1,
"activity3": selectedActivity3+1,
"activity_id": selectedActID
]

let boundary = generateBoundaryString()

let url = NSURL(string: "http://myServerURL/uploadImage")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

let newImageData = UIImageJPEGRepresentation(self.imageView.image, 1)
let newImage2Data = UIImageJPEGRepresentation(self.imageView2.image, 1)
let newImage3Data = UIImageJPEGRepresentation(self.imageView3.image, 1)

request.HTTPBody = createBodyWithParameters(parameters, imageDataKey: ["image1": newImageData, "image2": newImage2Data, "image3": newImage3Data], boundary: boundary)
.
.
.
}

CreateBodyWithParameters 函数

func createBodyWithParameters(parameters: [String: Int]?, imageDataKey: [String: NSData]?, boundary: String) -> NSData {
var body = NSMutableData();

if parameters != nil {
for (key, value) in parameters! {
body.appendString("–\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString("\(value)\r\n")
}
}
if imageDataKey != nil {
for (key, value) in imageDataKey! {
let filename = "user-profile.jpg"
let mimetype = "image/jpg"

body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"; filename=\"\(filename)\"\r\n")
body.appendString("Content-Type: \(mimetype)\r\n\r\n")
body.appendData(value)
body.appendString("\r\n")
}
}
body.appendString("\r\n-–\(boundary)-–\r\n")
return body
}

我收到的回复:

<NSHTTPURLResponse: 0x170439cc0> { URL: http://myServerURL/uploadImage } { status code: 500, headers {
"Cache-Control" = "no-cache";
Connection = close;
"Content-Type" = "text/html";
Date = "Thu, 04 Jun 2015 01:52:46 GMT";
Server = Apache;
"Set-Cookie" = "laravel_session=eyJpdiI6IjlyaWRKMjdBbTZiWWluSGk3QU9lcXc9PSIsInZhbHVlIjoiWlwvOHdtcURjOHlSTWR3MmtYNm0rbHlEaWJKSTMrZk1hWkVvSHpzTVdrcE5SQTl2bFkxemlJYUNLYkZMZjJxdEFCMFwvWENlMzFReW9GU3Jkam5XSmxvZz09IiwibWFjIjoiYWJmYWU2MDU2MGRkNzM1MjcyNWM1YjFjMDJjZjA5MmNjNjA4MzA3ZGE5MWMzNmJiZmE3ZTg3Y2I2OWI4N2E4NiJ9; expires=Thu, 04-Jun-2015 03:52:48 GMT; Max-Age=7200; path=/; httponly";
} }

最佳答案

最终您必须检查您的服务器是否出现了 500 错误。如果您怀疑它是多部分,我注意到您的第一个边界有一个破折号,应该有两个:

body.appendString("-–\(boundary)\r\n")

此外,不确定这是否是一个问题,但如果您有多个图像,请尝试使用另一个边界值。看最后一个例子here .

在我看来,构建多部分表单是一件痛苦的事情。如果我是你,我会使用像 Alamofire 或 AFNetworking 这样的连接库。

关于ios - 使用请求正文批量上传图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633860/

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