在swift ios中使用AFNetworking上传图片

Posted

技术标签:

【中文标题】在swift ios中使用AFNetworking上传图片【英文标题】:upload image using AFNetworking in swift ios 【发布时间】:2015-11-11 14:25:25 【问题描述】:

我正在尝试使用 AFNetworking 在 swift 中将图像上传到我的服务器,但我收到了此错误 The data couldn’t be read because it isn’t in the correct format.

  let manager = AFHTTPRequestOperationManager()
            let url = "http://path/to/server"
            let URL : NSURL = NSURL(string: url)!
            let req : NSURLRequest = NSURLRequest(URL: URL)
    let fileURL = NSURL(string: "file:///var/mobile/Media/DCIM/102APPLE/IMG_2623.PNG")
            manager.POST( url, parameters: nil,
                constructingBodyWithBlock:  (data: AFMultipartFormData!) in
                    do
                        _ = try data.appendPartWithFileURL(fileURL!, name: "uploaded_file", fileName: "image.png", mimeType: "image/png")
                    catch
                    
                ,
                success:  (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in
                    print("\(responseObject)")
                ,
                failure:  (operation: AFHTTPRequestOperation!, error: NSError!) in
                    print("\(error.localizedDescription)")
            )

有什么帮助吗?!

【问题讨论】:

【参考方案1】:

我猜你不能使用任意路径指向这样的文件。尝试使用应用程序包中的图像文件开始,然后使用 NSBundle URLForResourceWithExtension 之类的调用来获取文件。

如果您想从用户的相机胶卷中加载文件,您需要使用适当的 API,而不是直接的文件路径。 (对文件系统的直接访问受到“应用沙箱”的严格限制。)

【讨论】:

【参考方案2】:

在 Swift 4 中使用 AFNetworking 上传图片

let urlPath1 = "Path url here"

    let manager = AFHTTPRequestOperationManager()
    var Timestamp: String 
        return "\(NSDate().timeIntervalSince1970 * 1000)"
    
    let operation =  manager.post(urlPath1 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()

【讨论】:

以上是关于在swift ios中使用AFNetworking上传图片的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:使用 AFNetworking 解析响应 json

ios开发之--swift下AFNetworking的使用

如何在Swift 中使用AFNetworking

Swift使用Alamofire

swift iOS - AFNetworking扩展 - 使用网址取消请求,需要https://gist.github.com/danielgomezrico/ae53fae471168dde6c

swift iOS - AFNetworking扩展 - 使用网址取消请求,需要https://gist.github.com/danielgomezrico/ae53fae471168dde6c