首页 > 解决方案 > ios中的文件上传问题

问题描述

我通过文档选择器控制器上传文档文件时遇到问题。我通过文档选择器选择了文件。并使用服务中的多部分数据发送文件。但是 xcode 在 ios swift 中给出了一些错误。

这是我的图片上传代码。

Alamofire.upload(multipartFormData: { (multipartFormData) in
        for (key, value) in params {
            multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }

        multipartFormData.append(imageData!, withName: "upload_photo", fileName: "img.png", mimeType: "image/jpeg")
    }, to:pageURL)
    { (result) in
        switch result {
        case .success(let upload, _, _):
            self.stopLoader()
            upload.uploadProgress(closure: { (Progress) in
                print("Upload Progress: \(Progress.fractionCompleted)")
            })

标签: ios

解决方案


使用我下面的类,它是简单且易于管理的工作文件:

import UIKit
import Alamofire

class TDWebServices: NSObject {

    static let shared = TDWebServices()

    func post(urlString : String , param : [String : Any], completionHandler : @escaping ( _ result : Any?) -> ())  {
        Alamofire.request(urlString, method: .post, parameters: param, encoding: JSONEncoding.default, headers: ["Accept": "application/json"]).responseJSON { (response) in

            switch response.result {
            case .success:
                let json = response.result.value as? NSDictionary
                completionHandler(json)
            case .failure(let error):
                print(error)
                completionHandler(nil)
                return
            }
        }
    }

    func uploadImage(urlString : String , image : UIImage, param : [String : Any], completionHandler : @escaping ( _ result : Any?) -> ())  {

        guard let imageData = UIImageJPEGRepresentation(image, 0.5) else {
            print("Could not get JPEG representation of UIImage")
            return
        }

        let header: HTTPHeaders = [
            "Content-type": "multipart/form-data"
        ]

        Alamofire.upload(multipartFormData: { multipartFormData in

            for (key, value) in param {
                multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
            }

            multipartFormData.append(imageData,
                                     withName: "image", // <- It is param for uploading the file make sure it is perfect as per your API
                                     fileName: "image.jpg",
                                     mimeType: "image/jpeg")
        },
                         to: urlString,
                         headers: header, //  ["Authorization": "Basic xxx"]
                         encodingCompletion: { encodingResult in

                            switch encodingResult {
                            case .success(let upload, _, _):
                                upload.uploadProgress { progress in
//                                    progressCompletion(Float(progress.fractionCompleted))
                                }
                                upload.validate()
                                upload.responseJSON { response in
                                    completionHandler(response.result.value)
                                }
                            case .failure(let encodingError):
                                print(encodingError)
                                completionHandler(nil)
                            }
        })
    }

}

如何使用?

    let param  = ["user_id" : 123 as Any] // Whatever your params are

    // showActivity() // <- show activity indicator
    TDWebServices.shared.post(urlString: <your_api_url>, param: param) { (res) in
        // hideActivity()  // <- hide activity indicator
        if res != nil{
            let aDict = res as? [String : Any] // your response
            // Hnadle your code here
        }
        else{
            self.showAlert(title: "Invalid!", message: "Internet connection issue.", calcelHandler: {}) // <- If you have internet issue
        }
    }

仍然面临问题然后让我知道..


推荐阅读