AFNetworking:从文件发送图像
Posted
技术标签:
【中文标题】AFNetworking:从文件发送图像【英文标题】:AFNetworking: Send image from file 【发布时间】:2014-10-14 09:37:49 【问题描述】:我正在尝试发送包含图片的多部分发布请求。以下代码工作正常:
manager.POST( apiUrl + "/location/add",
parameters: parameters,
constructingBodyWithBlock: (formData : AFMultipartFormData!) -> Void in
// formData.appendPartWithFileURL(NSURL(string: location.imagePath!), name: "image", error: nil),
formData.appendPartWithFileData(img, name: imgParam, fileName: "randomimagename.jpg", mimeType: "image/jpeg"),
success: (operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in
println("JSON: " + responseObject.description)
var dict = responseObject as NSDictionary
let json = JSONValue(dict)
var message = ""
if let msg = json["message"].string message = msg
var success = false
if let s = json["success"].bool
callback(success: success, msg: message)
,
failure: (operation: AFHTTPRequestOperation!,error: NSError!) in
println("Error: " + error.localizedDescription)
var apiError = ApiError()
apiError.noConnection = true
errorCallback(apiError: apiError)
)
我想使用appendPartWithFileURL
而不是appendPartWithFileData
。如果我用上面代码中注释掉的行替换第 5 行,我会收到以下编译器错误:
Extra argument 'constructingBodyWithBlock' in call
有人知道怎么解决吗?
编辑:找到了一个(非常、非常、非常奇怪的)解决方案。换行
formData.appendPartWithFileURL(NSURL(string: location.imagePath!), name: "image", error: nil),
与
var temp = formData.appendPartWithFileURL(NSURL(string: location.imagePath!), name: "image", error: nil),
除了添加var temp =
,我没有做任何更改。我不知道为什么这有效,但确实有效。似乎是一个奇怪的错误。
【问题讨论】:
您好,您找到解决方案了吗? @Tarsem 抱歉,我不再研究这个问题,而是使用了 appendPartWithFileData。 @Tarsem:查看我的最新编辑 【参考方案1】:如果您还没有解决这个问题,请尝试将 location.imagePath 转换为 String。
在以下代码中添加as String
之前,我遇到了同样的问题:
func uploadFile(file: NSData, url: String, formData: NSDictionary, parameters: NSDictionary, completion: AnyObject -> Void, failure: NSError -> Void)
operationManager.requestSerializer = AFJSONRequestSerializer() as AFHTTPRequestSerializer
if operationManager.reachabilityManager.networkReachabilityStatus != .NotReachable
operationManager.POST(url, parameters: parameters, constructingBodyWithBlock: (data) in
data.appendPartWithFileData(file, name: formData["fileName"] as String, fileName: formData["fileName"] as String, mimeType: formData["mimeType"] as String)
, success: (operation, responseObject) in
completion(responseObject)
, failure: (operation, error) in
failure(error)
)
else
showReachabilityAlert()
希望对你有帮助。
【讨论】:
【参考方案2】:在将 URL 转换为字符串之前,我一直收到此错误。这是我正在做的事情(并在这样做时收到错误):
let manager = AFHTTPSessionManager()
let fullUrl = NSURL(string: name, relativeToURL: NSURL(string: apiBaseEndpoint))
manager.POST(fullUrl, parameters: nil, constructingBodyWithBlock: (formData) in
formData.appendPartWithFormData(file, name: "image")
, success: (operation, responseObject) in
NSLog("hit success")
, failure: (operation, error) in
NSLog("hit the error")
)
为了解决这个问题,我只是通过添加.absoluteString
将fullUrl
的分配改为使用字符串而不是NSURL
。
let fullUrl = NSURL(string: name, relativeToURL: NSURL(string: apiBaseEndpoint)).absoluteString
【讨论】:
以上是关于AFNetworking:从文件发送图像的主要内容,如果未能解决你的问题,请参考以下文章
使用AFnetworking以多部分格式上传图像在ios中不起作用
AFNetworking - 向 REST 发送 HTTP POST,发送带有 Base64string 图像的 JSON