ios - 如何使用具有基本身份验证的 alamofire 多部分表单数据上传图像?

标签 ios swift file-upload alamofire multipartform-data

我是编程和 iOS 开发方面的新手。我需要使用 Alamofire 多部分表单数据上传图像,但我还需要输入基本身份验证 header 。

在此线程中 Alamofire 4.0 Upload MultipartFormData Header ,好像和我的问题差不多,代码是这样上传的

Alamofire.upload(multipartFormData:{ multipartFormData in
         multipartFormData.append(unicornImageURL, withName: "unicorn")
         multipartFormData.append(rainbowImageURL, withName: "rainbow")},
       usingThreshold:UInt64.init(),
       to:"https://httpbin.org/post",
       method:.post, 
       headers:["Authorization": "auth_token"], 
       encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
            }
        case .failure(let encodingError):
            print(encodingError)
        }
    })

但我对如何放置基本身份验证(即用户名和密码) header 感到困惑。而且我也搞不清楚我应该把图像数据放在哪里。

我发现另一个线程似乎与我的问题相似。这是... How to upload MultipartFormData with authentication using Alamofire ,建议的解决方案是这段代码:

let username = "username"
let password = "password"

let credentialData = "\(username):\(password)".dataUsingEncoding(NSUTF8StringEncoding)!                  
let base64Credentials = credentialData.base64EncodedStringWithOptions([])
let headers = ["Authorization": base64Credentials]

Alamofire.upload(
    .POST,
    "https://rilbits.com/supersafe/photo/upload",
    headers: headers,
    multipartFormData: { multipartFormData in
        let data = "default".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
        multipartFormData.appendBodyPart(data: data, name: "_formname")
        multipartFormData.appendBodyPart(fileURL: fileURL, name: "photo")
    },
    encodingCompletion: { encodingResult in
        switch encodingResult {

        case .Success(let upload, _, _):
            upload.responseString { response in
                debugPrint(response)
            }

        case .Failure(let encodingError):
            print(encodingError)
        }
    }
)

但是在修复到 swift 4.1 之后它给出了一个错误:

enter image description here

你能解决我的问题吗?提前致谢:)

最佳答案

我已经创建了这个函数:希望它对你有用:-

 //Alamofire file upload code
func requestWith(URLString: String,
                 imageData: Data?,
                 fileName: String?,
                 pathExtension: String?,
                 parameters: [String : Any],
                 onView: UIView?,
                 vc: UIViewController,
                 completion:@escaping (Any?) -> Void,
                 failure: @escaping (Error?) -> Void) {

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

    let URL = BASE_PATH + URLString
    Alamofire.upload(multipartFormData: { (multipartFormData) in
        for (key, value) in parameters {
            multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
        }

        if let data = imageData {
            multipartFormData.append(data, withName: "fileUpload", fileName: "\(fileName!).\(pathExtension!)", mimeType: "\(fileName!)/\(pathExtension!)")
        }

    }, usingThreshold: UInt64.init(), to: URL, method: .post, headers: headers) { (result) in

        switch result {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                if let err = response.error {
                    failure(err)
                    return
                }
                completion(response.result.value)
            }
        case .failure(let error):
            print("Error in upload: \(error.localizedDescription)")
            failure(error)
        }
    }
}

关于ios - 如何使用具有基本身份验证的 alamofire 多部分表单数据上传图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50327062/

相关文章:

objective-c - iCloud 显示套装有什么用?

iphone - UITextfield 文本在编辑中移动

swift - 调用中的参数缺少参数 'toptext'

swift - 在 Swift 中包装和拆开可选值时会发生什么?

c# - 如何计算上传文件的百分比?

php - move_uploaded_file() : Unable to move '/tmp/phpiS3dQA' to '/var/www/html/mysite/uploads/PNGWallpaper. png

ios - 如何将 UITableCellView 中的 imageView 属性设置为仅显示背景颜色?

swift - CGAffineTransform 弄乱了 ViewFrame

c# - 使用 ASP.NET MVC 将图像保存到数据库

ios - UITextField 文本未保存