Не могу загрузить несколько файлов из массива с Alamofire - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь загрузить несколько изображений и видео из библиотеки в URL. Evertying работает нормально, за исключением того, что ответ превращает только один файл. Я выбираю два разных изображения для эксперимента, но ответ только для последнего изображения в массиве. вот моя функция загрузки ..

 func upload() {
    var mediaData = Data()
    var fname = ""
    var mimetype = ""
    let url = URL(string: "https://myurl.com/api/attachment/upload")
        let headers: HTTPHeaders = [
            "Authorization": "my Authorization Token",
            "Content-type": "multipart/form-data"
        ]

        Alamofire.upload(multipartFormData: { multipartFormData in
               for n in 0..<self.array.count{
                    mediaData = self.array[n].data
                    if self.array[n].type == "image"{
                        fname = "resim\(n).jpeg"
                        mimetype = "image/jpeg"
                    }else{
                        fname = "video\(n).mp4"
                        mimetype = "video/mp4"
                    }
                    multipartFormData.append(mediaData, withName: "files", fileName: fname, mimeType:mimetype)
                }


        },
          to: url!, method: .post, headers: headers) { (result) in
            switch result{
            case .success(let upload, _, _):
                upload.uploadProgress(closure: { (progress) in

                    print("uploding: \(progress.fractionCompleted)")
                })


                upload.responseJSON{ response in
                    print(response)
                    self.hud.dismiss()

                    if let err = response.error{
                        print(err)
                        return
                    }

                }
            case .failure(let error):
                print("Error in upload: \(error.localizedDescription)")

            }
        }
}

и это то, что сервер возвращает в ответ.

SUCCESS: {
files =     (
            {
        "local_name" = BaN9x05lU8jNQPJ30RfbT4rqismLp7LE45sHezHvI;
        "real_name" = "resim1.jpeg";
    }
);
}

Есть идеи, где я ошибся?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я решил проблему, изменив "files[\(n)]" на часть кода

 multipartFormData.append(mediaData, withName: "files", fileName: fname, mimeType:mimetype)

тогда проблема решена.

func upload() {
var mediaData = Data()
var fname = ""
var mimetype = ""
let url = URL(string: "https://myurl.com/api/attachment/upload")
    let headers: HTTPHeaders = [
        "Authorization": "my Authorization Token",
        "Content-type": "multipart/form-data"
    ]

    Alamofire.upload(multipartFormData: { multipartFormData in
           for n in 0..<self.array.count{
                mediaData = self.array[n].data
                if self.array[n].type == "image"{
                    fname = "resim\(n).jpeg"
                    mimetype = "image/jpeg"
                }else{
                    fname = "video\(n).mp4"
                    mimetype = "video/mp4"
                }
                multipartFormData.append(mediaData, withName: "files[\(n)]", fileName: fname, mimeType:mimetype)
            }


    },
      to: url!, method: .post, headers: headers) { (result) in
        switch result{
        case .success(let upload, _, _):
            upload.uploadProgress(closure: { (progress) in

                print("uploding: \(progress.fractionCompleted)")
            })


            upload.responseJSON{ response in
                print(response)
                self.hud.dismiss()

                if let err = response.error{
                    print(err)
                    return
                }

            }
        case .failure(let error):
            print("Error in upload: \(error.localizedDescription)")

        }
    }

}

0 голосов
/ 05 сентября 2018
check below code

var dataArray = [("name": "unicorn1", "imageData": imgData1), ("name": "unicorn2", "imageData": imgData2)] Alamofire.upload ( multipartFormData: {multipartFormData in

        for dat in dataArray {

           multipartFormData.append(dat.imageData, withName: dat.name)
        }

    },
    to: "https://httpbin.org/post",
    encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
            }
        case .failure(let encodingError):
            print(encodingError)
        }
    }
)
...