Доступ к encodingResult при загрузке с помощью Alamofire 5 - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь обновить свое приложение до Alamofire 5, и у меня возникают трудности из-за того, что я его использую sh, я его использую. на самом деле не предназначен для этого. Тем не менее, я использовал его для создания правильно отформатированного файла, содержащего составную форму, чтобы я мог передать его в ОС для загрузки в фоновом режиме позже.

* 1004 вопрос в том, как я могу получить URL-адрес файла, который я ранее получал с помощью encodingResults?
// We're not actually going to upload photo via alamofire. It does not offer support for background uploads.
// Still we can use it to create a request and more importantly properly formatted file containing multipart form
                Api.alamofire.upload(
                    multipartFormData: { multipartFormData in
                        multipartFormData.append(imageData, withName: "photo[image]", fileName: filename, mimeType: "image/jpg")
                },
                    to: "http://", // if we give it a real url sometimes alamofire will attempt the first upload. I don't want to let it get to our servers but it fails if I feed it ""
                    usingThreshold: UInt64(0), // force alamofire to always write to file no matter how small the payload is
                    method: .post,
                    headers: Api.requestHeaders,
                    encodingCompletion: { encodingResult in

                        switch encodingResult {
                        case .success(let alamofireUploadTask, _, let url):
                            alamofireUploadTask.suspend()
                            defer { alamofireUploadTask.cancel() }
                            if let alamofireUploadFileUrl = url {                                
                                // we want to own the multipart file to avoid alamofire deleting it when we tell it to cancel its task
                                let fileUrl = ourFileUrl
                                do {
                                    try FileManager.default.copyItem(at: alamofireUploadFileUrl, to: fileUrl)
                                    // use the file we just created for a background upload
                                } catch {
                                }
                            }
                        case .failure:
                            // alamofire failed to encode the request file for some reason
                        }
                    }
                )

1 Ответ

1 голос
/ 18 июня 2020

Многокомпонентное кодирование полностью интегрировано в конвейер теперь асинхронных запросов в Alamofire 5. Это означает, что нет отдельного шага для использования. Однако вы можете использовать тип MultipartFormData напрямую, так же, как и при закрытии запроса.

let data = MultipartFormData()
data.append(Data(), withName: "dataName")
try data.encode()
...