AFNetworking 上传带参数的图片

Posted

技术标签:

【中文标题】AFNetworking 上传带参数的图片【英文标题】:AFNetworking upload image with parameters 【发布时间】: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)
    

我的问题是:

    如何获取参数?

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

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

【问题讨论】:

哪些参数在哪里?您发布了 AFNetworking 的代码,但您似乎在询问如何在服务器端用 Java 获取它? 【参考方案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()

【讨论】:

以上是关于AFNetworking 上传带参数的图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在上传带参数的图像时使用 AFNetworking 2.0 设置 cookie?

AFNetworking : 上传带有其他参数的图片

iOS开发AFN使用二:AFN文件下载与文件上传

利用AFN上传多张图片到服务器

[AFN]AFNetworking错误总结

上传图片流到服务器(AFN方法) (多张图片)(图片流)