【问题标题】:AFNetworking upload image with parametersAFNetworking 上传带参数的图片
【发布时间】:2015-08-06 09:52:40
【问题描述】:

我使用这种方法将数据发布到我的java servlet,但getParameter("2")为null,但我仍然可以获取图像。

 let dics = NSMutableDictionary()
    dics.setObject(1, forKey: "2")
    dics.setObject(2, forKey: "3")
    manager.responseSerializer.acceptableContentTypes = NSSet(object: "text/plain") as Set<NSObject>

    manager.POST(urlstr, parameters: dics, constructingBodyWithBlock: {
        fromData in
        fromData.appendPartWithFormData(imgdata, name: "userImg")
    }, success: { (operation, responseObject)in
        println("bingo")
    }) { (operation, error) -> Void in
        println(error)
    }

我的问题是:

  1. 如何获取参数?

  2. 我想知道appendPartWithFormData(imgdata, name: "userImg"),我应该如何使用“userImg”?

我使用 request.getInputStream() 来获取图像..

【问题讨论】:

  • 哪些参数在哪里?您发布了 AFNetworking 的代码,但您似乎在询问如何在服务器端用 Java 获取它?

标签: ios swift afnetworking afnetworking-2


【解决方案1】:

试试Alamofire框架,我一定能解决你的问题。

您可以像这样上传多部分表单数据;

Alamofire.upload(
.POST,
URLString: "http://httpbin.org/post",
multipartFormData: { multipartFormData in
    multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "userImg")

},
encodingCompletion: { encodingResult in
    switch encodingResult {
    case .Success(let upload, _, _):
        upload.responseJSON { request, response, JSON, error in
            println(JSON)
        }
    case .Failure(let encodingError):
        println(encodingError)
    }
}

)

【讨论】:

  • !我会试试看。但是我仍然不知道 appendBodyPart 中参数“userImg”的含义。以及我如何在服务器端使用它?你能解释一下吗? :) 非常感谢!!
【解决方案2】:

我已经解决了这个问题! :^)

我发布到服务器的方式是正确的,但是我获取参数的方式是错误的。 iOS 或 AFN 没有问题。

因为我将多表单数据发布到服务器,所以我不能只使用 request.getParameter("2") 来获取参数。

appendPartWithFormData(imgdata, name: "userImg")中的参数“name”是将数据与其他数据分开。

如何获取Servlet中的multipart/form-data参数,请点击:get multipart/form-data parameters in servlet

【讨论】:

    【解决方案3】:

    在 Swift 4 中使用 AFNetworking 上传图片

    func uploadUsingPOST_Image (urlPath: NSString, withParameter dictData: NSMutableDictionary, withImage image: UIImage, WithImageName imageName: NSString,successBlock success:@escaping (_ responceData:AnyObject)->Void) {
    
        let manager = AFHTTPRequestOperationManager()
    
        var Timestamp: String {
            return "\(NSDate().timeIntervalSince1970 * 1000)"
        }
    
        let operation =  manager.post(urlPath as String, parameters: dictData, constructingBodyWith: { (data:AFMultipartFormData!) -> Void in
    
            if image != nil {
    
                data.appendPart(withFileData: UIImagePNGRepresentation(image!)!, name: imageName as String, fileName: "\(Timestamp).png", mimeType: "image/png")
    
    
            }
        }, success: { (operation, responseObject) -> Void in
    
            success(responseObject as AnyObject)
        }) { (operation, error) -> Void in
    
            print(error, terminator: "")
        }
    
        operation?.start()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      相关资源
      最近更新 更多