【问题标题】:Not able to Upload nested multipart form-data in swift无法快速上传嵌套的多部分表单数据
【发布时间】:2016-02-29 15:40:43
【问题描述】:

大家好,我在快速上传嵌套的多部分表单数据时遇到问题我尝试使用 alamofire,但它没有做我想做的事情:(。 我的服务器正在运行 Django Rest 框架,只需上传图像和参数就可以了,问题是上传带有嵌套图像和其他用户数据的用户数据。 所以认为我在嵌套表单数据的语法上做错了我的函数正在工作并且正在创建用户但是服务器无法保存图像

func createUserWithImage(userName username: String, email: String, password: String, firstName: String, lastName: String, completion: UserHandler = nil) {
    var user: User? = nil
    defer { completion?(user) }

    let testField: String = "testoftestfield"
    let status: String = "test of status"
    let parameters = [
        "username": username,
        "email": email,
        "password": password,
        "first_name": firstName,
        "last_name": lastName,
    ]

    let image = UIImage(named: "ali.jpg")

    Alamofire.upload(.POST, Endpoint.RegisterUser.url, multipartFormData: {
        multipartFormData in

        if let _image = image {
            print("test1")
            if let imageData = UIImageJPEGRepresentation(_image, 0.5) {
                print("test2")
                multipartFormData.appendBodyPart(data: imageData, name: "profile[profileImage]", fileName: "profileImage.jpg", mimeType: "image/jpg")
            }
        }

        for (key, value) in parameters {
            multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
        }

        }, encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { response in
                    debugPrint(response)

                    let json = JSON(upload)

                    print("The Upload is: " + json.description)
                }
            case .Failure(let encodingError):
                print(encodingError)
            }
    })

}

那么有人知道如何发送嵌套的多部分表单数据吗?:)

【问题讨论】:

    标签: django swift django-rest-framework multipartform-data alamofire


    【解决方案1】:

    func uploadImageWithFormedData() -> () {

      /* My URL:http://162.74.44.11/ImageApp/index.php/api/user/set_pic;
    
         Input Parameter :
       InputDict:
        {
            "user_id" = "1",
            "avtar" = "default",
            "picture" = "image.png"
        }
    

    */

        let BoundaryConstant  = "----------V2ymHFg03ehbqgZCaKO6jy";
        let FileParamConstant = "picture"
    
        let requestURL:URL = URL(string: "http://162.74.44.11/ImageApp/index.php/api/user/set_pic")! as URL
    
        var request : URLRequest = URLRequest (url: requestURL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 30.0)
        request.httpMethod = "POST"
        request.httpShouldHandleCookies = false;
        let  contentType = "multipart/form-data; boundary=\(BoundaryConstant)"
        request.setValue(contentType, forHTTPHeaderField: "Content-Type")
    

    // 保存帖子参数的字典。您可以设置您的服务器接受或编程接受的帖子参数。

        var _params = [String:String]()
    
        _params.updateValue(user_id, forKey: "user_id")
        _params.updateValue("default", forKey: "avtar")
    
        var body:Data = Data()
        for (key,value) in _params
        {
            body.append("--\(BoundaryConstant)\r\n".data(using:String.Encoding.utf8)!)
    
            body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using:String.Encoding.utf8)!)
    
            body.append("\(value)\r\n".data(using:String.Encoding.utf8)!)
    
    
        }
    
        let imageData:Data? = UIImagePNGRepresentation(UIImage(named: "girl_greendotted_cloth")!)
    
        if imageData != nil {
            body.append("--\(BoundaryConstant)\r\n".data(using:String.Encoding.utf8)!)
    
            body.append("Content-Disposition: form-data; name=\"\(FileParamConstant)\"; filename=\"image.png\"\r\n".data(using:String.Encoding.utf8)!)
    
            body.append("Content-Type: image/jpeg\r\n\r\n".data(using:String.Encoding.utf8)!)
    
            body.append(imageData!)
    
            body.append("\r\n".data(using:String.Encoding.utf8)!)
        }
    
        body.append("--\(BoundaryConstant)--\r\n".data(using:String.Encoding.utf8)!)
    
        request.httpBody = body
    
        request.setValue("\(body.count)", forHTTPHeaderField: "Content-Length")
    
        let session = URLSession.shared
        let  task = session.dataTask(with: request, completionHandler: {(data,response,error) in
    
    
            if (data != nil)
            {
                do{
                    let dict =  try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableLeaves)
                    print(dict);
                }
                catch
                {
    
                }
    
            }
    
        }
        )
    
        task.resume()
    
    
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2013-05-01
      相关资源
      最近更新 更多