Swift Alamofire 发送图像数组和其他参数

Posted

技术标签:

【中文标题】Swift Alamofire 发送图像数组和其他参数【英文标题】:Swift Alamofire send array of images together with other parameters 【发布时间】:2016-08-15 01:54:41 【问题描述】:

我正在尝试使用 Alamofire 将图像与其他帖子参数一起上传。

查看我看到的文档:

Alamofire.upload(
    .POST,
    "https://httpbin.org/post",
    multipartFormData:  multipartFormData in
        multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "unicorn")
        multipartFormData.appendBodyPart(fileURL: rainbowImageURL, name: "rainbow")
    ,
    encodingCompletion:  encodingResult in
        switch encodingResult 
        case .Success(let upload, _, _):
            upload.responseJSON  response in
                debugPrint(response)
            
        case .Failure(let encodingError):
            print(encodingError)
        
    
)

但是我怎样才能上传一组图片,例如:

var arrayOfImages: [UIImage] = [some images...]

连同其他帖子数据:

let parameters: [String: AnyObject] = [
            "id": id,
            "title": title,
            "desc": description,
            "images[]": arrayOfImages
        ]

【问题讨论】:

【参考方案1】:
    func uploadProfileGIF(imageArray: NSMutableArray)
    var count = 0
    let bucketname = DAO.getBucketNameForLoggedInUser()
    let uploadUrl = "https://whatever.com/whatever"
    for i in imageArray
        var objectname = "picture" + String(count)
        let image = i;
        //Turn image into data
        let imageData: NSData = UIImagePNGRepresentation(image as! UIImage)!
        let params = ["objectname" : objectname, "bucketname" : bucketname!, "isGifImgae" : "True", "content_type" : "image/jpeg"]

        let manager = AFHTTPSessionManager()
        manager.POST(uploadUrl, parameters: params, constructingBodyWithBlock:  (AFMultipartFormData) in

            AFMultipartFormData.appendPartWithFileData(imageData, name: "file", fileName: "image", mimeType: "image/jpeg")
            , progress: nil, success:  (s:NSURLSessionDataTask, response) in
                print(response)
        )  (s:NSURLSessionDataTask?, e:NSError?) in
            print(e)
        
        count+=1
    


我就是这样做的。希望这可以帮助。它的 AlamoFire,它是一个 POST 请求,我猜只是一种不同的语法。只是一个 for 循环,它对数组中的每个图像进行 API 调用。

编辑:

因此,不要使用 for 循环并单独调用 API 五次,只需更改 AFMultipartofrmdata 的名称即可。当您访问文件时,传入 5 个文件,然后在您的 API 中,只需按名称访问它们。比如我的API抓取文件的方式,在Python中就是这样的

data = self.request.get('file')

现在数据是我的图像,我可以上传它。 只需在同一个 API 调用中执行五次不同的操作。

    AFMultipartFormData.appendPartWithFileData(imageData1, name: "file1", fileName: "image", mimeType: "image/jpeg")
    AFMultipartFormData.appendPartWithFileData(imageData2, name: "file2", fileName: "image", mimeType: "image/jpeg")
    AFMultipartFormData.appendPartWithFileData(imageData3, name: "file3", fileName: "image", mimeType: "image/jpeg")
    AFMultipartFormData.appendPartWithFileData(imageData4, name: "file4", fileName: "image", mimeType: "image/jpeg")
    AFMultipartFormData.appendPartWithFileData(imageData5, name: "file5", fileName: "image", mimeType: "image/jpeg")

然后只需在 for 循环中分配名称和 NSData。

然后在 API 方面,类似这样的东西;

image1 = self.request.get('file1')
image2 = self.request.get('file2')
image3 = self.request.get('file3')
image4 = self.request.get('file4')
image5 = self.request.get('file5')

希望这会有所帮助!这就是我将 API 调用更改为的原因,而不是为每个用户调用 5 次不同的时间。

【讨论】:

感谢分享,但我需要在同一个 API 调用中发送所有图像:/

以上是关于Swift Alamofire 发送图像数组和其他参数的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 序列化包含对象数组的对象并使用 alamofire 发送

使用 PHP 在 Swift 5 中使用 Alamofire 接收图像上传

发送 Alamofire JSON 数组 Swift

发送包含数组的数组 json 主体(Alamofire、Swift、iOS)

如何在 swift 3 中使用 Alamofire 制作和发送字典数组(JSON 格式)发送到服务器

使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数