如何上传文件multipart alamofire swift5?



我正在尝试通过multipart向服务器发送文件。它可以是图像或普通文件。我在使用url可转换时有一些困难。我看到Alamofire有这样的方法,也许对我有用:

AF.upload(multipartFormData: <(MultipartFormData) -> Void>, to: <URLConvertible>)

但是这里你可以,我不能附加拦截器,它将处理401错误。为此,我创建了这样一个变量:

let manager =  Session(configuration: URLSessionConfiguration.default, interceptor: CallInterceptor.init(method:HTTPMethod.post))

并创建了请求:

var request = URLRequest(url: Pathes.init(endpoint: "photo").resourseUrl)
request.httpMethod = HTTPMethod.post.rawValue

和最终使用附加到照片选择器:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
guard let fileUrl = info[UIImagePickerController.InfoKey.imageURL] as? URL else { return }
if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

.....

manager.upload(multipartFormData: { (formData) in
formData.append(fileUrl, withName: "photo", fileName: fileName, mimeType: mediaType)
}, to: request as! URLConvertible).validate(statusCode: 200..<300)
.responseJSON(completionHandler: { (response) in
print(response.debugDescription)
})

}
}

,但结果我的应用程序崩溃了这样的错误:

Could not cast value of type 'Foundation.URLRequest' (0x7fff85d1dbd8) to 'Alamofire.URLConvertible' (0x7ffb558a5320)

我想我有两种方法:使用另一个AF方法或创建另一个请求类型。但我无法想象哪个方法将帮助我一方面,另一方面,我不知道如何创建URLConvertible。我想我可以这样做:

let urlRequest: Alamofire.URLRequestConvertible = request

但是应用程序又崩溃了。我做错了什么?

如果您想使用URLRequest而不是URL,则需要使用适当的upload过载:upload(multipartFormData:with:)

manager.upload(multipartFormData: { (formData) in
formData.append(fileUrl, withName: "photo", fileName: fileName, mimeType: mediaType)
}, with: request)

let PDFUrl = URL(string: "file://(yourdirectoryurl)")let myData = try Data(contentsOf: PDFUrl!)作为URL)

let data : Data = myData
multipartFormData.append(data as Data, withName: "files", mimeType:"application/pdf")

最新更新