我正在尝试在Swift中上传带参数的图像.当我尝试这段代码时,我可以得到参数而不是图像
uploadFileToUrl(fotiño:UIImage){
var foto = UIImage(data: UIImageJPEGRepresentation(fotiño, 0.2))
var request = NSMutableURLRequest(URL:NSURL(string: "URL"))
request.HTTPMethod = "POST"
var bodyData = "id_user="PARAMETERS&ETC""
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
request.HTTPBody = NSData.dataWithData(UIImagePNGRepresentation(foto))
println("miraqui \(request.debugDescription)")
var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?>=nil
var HTTPError: NSError? = nil
var JSONError: NSError? = nil
var dataVal: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: &HTTPError)
if ((dataVal != nil) && (HTTPError == nil)) {
var jsonResult = NSJSONSerialization.JSONObjectWithData(dataVal!, options: NSJSONReadingOptions.MutableContainers, error: &JSONError)
if (JSONError != nil) {
println("Bad JSON")
} else {
println("Synchronous\(jsonResult)")
}
} …Run Code Online (Sandbox Code Playgroud) 我对swift非常新,所以我的代码中可能会有很多错误,但我想要实现的是向GET带有参数的localhost服务器发送请求.更多,所以我试图实现它,因为我的函数有两个参数baseURL:string,params:NSDictionary.我不确定如何将这两者合并到实际的URLRequest中?这是我到目前为止所尝试的
func sendRequest(url:String,params:NSDictionary){
let urls: NSURL! = NSURL(string:url)
var request = NSMutableURLRequest(URL:urls)
request.HTTPMethod = "GET"
var data:NSData! = NSKeyedArchiver.archivedDataWithRootObject(params)
request.HTTPBody = data
println(request)
var session = NSURLSession.sharedSession()
var task = session.dataTaskWithRequest(request, completionHandler:loadedData)
task.resume()
}
}
func loadedData(data:NSData!,response:NSURLResponse!,err:NSError!){
if(err != nil){
println(err?.description)
}else{
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
println(jsonResult)
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用CloudKit作为远程持久保存数据的方法.我的一个记录有一个CKAsset属性,用于保存图像.当我获取记录时,我意识到完成查询需要花费很多时间.经过多次测试,我得出结论,当您查询记录时,CloutKit会使用记录对象下载整个Asset文件.因此,当你获得记录对象的资产,并要求它的fileURL,它给你一个本地文件路径的URL,而不是HTTP网址类型.这对我来说是个问题,因为你必须让用户等待这么多时间才能在查询结束之前下载整个记录(及其相关图像).从解析背景的,解析用来给你的HTTP URL和查询速度足够快,同时加载图像异步与对象加载UI.我的问题是,我怎样才能实现Parse的作用?我需要限制查询下载Assets数据并获取一个链接以异步加载图像.
URLSession当应用程序处于后台时,数据任务块没有调用,并且它仍然处于dataTask请求状态.
当我打开应用程序时,块被调用.顺便说一句,我正在使用https请求.
这是我的代码:
let request = NSMutableURLRequest(url: URL(string: url as String)!,
cachePolicy: .reloadIgnoringCacheData,
timeoutInterval:20)
request.httpMethod = method as String
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let session = URLSession.shared
let data = params.data(using: String.Encoding.utf8.rawValue)
request.httpBody = data
session.dataTask(with: request as URLRequest,completionHandler:
{(data, response, error) -> Void in
if error == nil
{
do {
let result = try JSONSerialization.jsonObject(with: data!, options:
JSONSerialization.ReadingOptions.mutableContainers)
print(result)
completionHandler(result as AnyObject?,nil)
}
catch let JSONError as NSError{
completionHandler(nil,JSONError.localizedDescription as NSString?)
}
}
else{ …Run Code Online (Sandbox Code Playgroud) 这是我第一次使用swift在iOS开发中使用REST.我找不到任何工作或直接(简单)的例子来做我需要的东西.
我有一个登录后端(https://myaddress.com/rest/login),我需要传递2个参数:登录和密码.当我传递好的值(用户存在于数据库中)时,我得到2个变量:token(string)和firstLogin(bool).因此,当我获得这些值时,我知道登录成功,我可以登录到我的应用程序.
所以我要求你们提供一个如何实现这个目标的例子(只是一个简单的函数).如果我得到工作代码示例,我将知道如何在我的应用程序中将其用于其他休息服务.我从我找到的教程中尝试了很多解决方案,但是其中任何一个都在为我工作..所以为了不浪费我的时间搜索我希望有经验的人向我展示实现这一目标的方法.
我不确定Alamofire是否如此好用,我知道swift 4拥有自己的构建网络服务并与json合作.任何有效的解决方案都会很棒.
另外,附带问题 - 如果我更喜欢使用Alamofire,我还需要使用swiftyJSON吗?或者只是为了解析?
好的,我现在开始使用iOS开发,目前使用Obj-C播放NSData.最近我使用URLSession:dataTask:didReceiveData方法使用HTTP POST请求获取NSData .服务器将响应包含JSON数组的JSON对象.
有趣的是,当响应数据太大时,NSLog部分将打印出:"数据无法读取,因为它的格式不正确".以下是功能:
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
NSError *error;
// get data from NSData into NSDict
NSDictionary *searchData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
NSArray *test = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSMutableDictionary *mdict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
NSLog(@"what: %@", mdict);
NSLog(@"received data length: %@", [NSByteCountFormatter stringFromByteCount:data.length countStyle:NSByteCountFormatterCountStyleFile]);
if (error) {
NSLog(@"json error: %@", [error localizedDescription]);
}
}
Run Code Online (Sandbox Code Playgroud)
只是想知道是否有人知道造成这个问题的潜在原因??
[更新]
好吧,解决此问题的另一种方法可能是使用NSString进行数据存储.但是我必须自己解析它.我更喜欢使用NSDictionary.
我有一本需要转换为 Json 的字典。
[
Dict1:1,
test: A Value,
NestedDict1:[
city: A City Name,
address: An Address,
NestedDict2: [
1: 1,
39: 2
],
favorite1: 2,
favorite3: Chocolate
]
]
Run Code Online (Sandbox Code Playgroud)
当我使用
NSJSONSerialization.dataWithJSONObject(myJsonDict, options: NSJSONWritingOptions.PrettyPrinted, error: nil)
Run Code Online (Sandbox Code Playgroud)
它只编码最外面的字典。所以我的输出看起来像这样:
NSJSONSerialization.dataWithJSONObject(myJsonDict, options: NSJSONWritingOptions.PrettyPrinted, error: nil)
Run Code Online (Sandbox Code Playgroud)
我如何对内部字典进行 JSON 处理?
我改编自Ray Wenderlich的iOS Apprentice教程第4部分。
这段代码可以作为GET请求发送到带有简单数据库模型的Strongloop API,但是:
这行得通,但我不知道为什么行得通,因为它没有调用我可以看到的实际发送请求的方法。
我认为没有任何方法可以使其进入POST请求。
我的问题是:如何执行POST请求?以完全不同的方式完成吗?
如果您需要更多信息,请与我们联系。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func getFromDB() {
let url = urlWithSearchText("")
println("URL: '\(url)'")
if let jsonString = performGetRequestWithURL(url) {
println("Received JSON string '\(jsonString)'")
}
}
func urlWithSearchText(searchText: String) -> NSURL {
let escapedSearchText = searchText.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
let …Run Code Online (Sandbox Code Playgroud) 我现在在我的应用程序中设置了 Firebase 通知,当我发送消息时,消息会发送给我应用程序的所有用户。(我目前通过 Firebase 控制台发送消息)。我想要另一种不涉及 Firebase 控制台的推送通知发送方式,我相信 HTTP Post 是一种简单的方法。如何使用 HTTP Post 远程发送推送通知?
我在我的项目中安装了Alamofire,现在这就是我所做的.
我安装了邮差,我把我的网址和内部的一个xml对象,我得到了我的结果.
这是我对邮递员所做的一切
我现在如何使用Alamofire或SWXMLHash发送它,因为我发送邮件
提前致谢!
编辑
我从另一个问题尝试了这个:
Alamofire.request(.POST, "https://something.com" , parameters: Dictionary(), encoding: .Custom({
(convertible, params) in
let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
let data = (self.testString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
mutableRequest.HTTPBody = data
return (mutableRequest, nil)
}))
.responseJSON { response in
print(response.response)
print(response.result)
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有发送任何东西
这是日志:
可选({URL:https: //something.com } {状态代码:200,headers {Connection ="keep-alive";"Content-Length"= 349;"Content-Type"="application/xml";日期="Wed,2016年11月2日21:13:32 GMT"; Server = nginx;"Strict-Transport-Security"="max-age = 31536000; includeSubDomains";}})
失败
编辑
如果没有简单的添加,请不要忘记参数参数:参数:Dictionary()
ios ×9
swift ×7
json ×3
alamofire ×2
cloudkit ×1
dictionary ×1
file-upload ×1
firebase ×1
get ×1
http ×1
image ×1
nsurlrequest ×1
nsurlsession ×1
objective-c ×1
post ×1
postgresql ×1
rest ×1
strongloop ×1
swift4 ×1
swxmlhash ×1
xcode ×1
xcode8 ×1
xml ×1