swift - Alamofire Swift 3 仅上传数组中的最后一张图片

标签 swift image asynchronous file-upload alamofire

我需要一次将多张图片上传到 API。我正在使用 Alamofire 上传图片,API 只允许每个请求上传一张图片。

我有一个要上传的图像数组,我要遍历该数组并每次都发出请求。每张图片似乎都已正确上传,但当我检查数据库时,只有最后一张图片已上传。每个调用都会打印状态代码为 200 的响应,并在完成时打印“SUCCESSFUL”,但实际上只有数组中的最后一个才会上传。

for (index, image) in self.imageArray.enumerated() {
        self.uploadImages(photoIndex: index, photo: image.image, fileName: image.imageName, completion: { (true) in
            print("SUCCESSFUL")
        })
}

我也尝试过使用 DispatchQueue,但这也不起作用:

 let serialQueue = DispatchQueue(label: "serialQueue")

在for循环中

serialQueue.async {
 //self.uploadImages...
}

我又尝试了一些东西,但没有成功。我该如何解决这个问题?

此外,这是我的上传图片功能

func uploadImages(photoIndex: Int, photo: UIImage, fileName: String, completion: @escaping (_ Success : Bool?) -> ())
    {
        var success: Bool? = nil

        let url : String? = //url
        // define parameters
        let parameters = [
            "photoIndex": "\(photoIndex)"]

        Alamofire.upload(multipartFormData: { multipartFormData in
            if let imageData = UIImageJPEGRepresentation(photo, 1)
            {
                multipartFormData.append(imageData, withName: "photo", fileName: fileName, mimeType: "image/png")
            }

            for (key, value) in parameters {
                multipartFormData.append((value.data(using: .utf8))!, withName: key)
            }}, to: url!, method: .post,
                encodingCompletion: { encodingResult in
                    switch encodingResult {
                    case .success(let upload, _, _):
                        upload.response { [weak self] response in
                            guard let strongSelf = self else {
                                return
                            }
                            success = true
                            debugPrint(response)
                            completion(success)

                        }
                    case .failure(let encodingError):
                        print("error:\(encodingError)")
                        }
        })
    }

最佳答案

使用多部分表单数据上传任意媒体文件下面是上传多个视频的代码片段

for (key , value) in arrMediaUpload {
                        if let image = value as? UIImage {
                            if let imageData = UIImageJPEGRepresentation(image,0.9) {
                                print("key => \(key)")
                                multipartFormData.append(imageData as Data, withName: key, fileName: "\(NSDate().timeIntervalSince1970).jpg", mimeType: "image/*")
                            }
                        }
                    }

关于swift - Alamofire Swift 3 仅上传数组中的最后一张图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45767300/

相关文章:

swift - 扩展 Dictionary,其中 Key 是 String 类型

android - 在 Android 中将图像添加到 iText pdf

javascript - 从谷歌地图回调函数返回值

ios - 如何编辑 UIScrollView 大小?

swift - MFMailComposeViewController navigationBar 自定义背景色

ios - SpriteKit 和 SwiftUI 动画(内存泄漏 - NSXPCConnection?)

css - 如何使用 index.css 在 google app engine 中为留言簿应用程序插入背景图片?

java - Argb分解/重组问题

javascript - 在 AngularJS 中异步加载数据的正确方法

c# - 在扩展方法中使用 await 运算符时是否需要考虑可能的重入编码问题?