覆盖服务器上的JSON数据

时间:2016-01-16 18:40:20

标签: objective-c json post nsurlsession

我的应用程序从我的服务器(GoDaddy)下拉JSON文件并将其解析为数组。然后,用户可以向现有JSON添加新记录。当我尝试将所有数据发回服务器时,我遇到了问题。

要明确的是,我尝试使用新数据覆盖服务器上的现有文件。我知道FTP不是我需要的方向,但我没有使用任何类型的数据库。只是服务器上的文件。

我确保JSON有效且我已调用GoDaddy以确保我不需要更改任何权限。我之前已将此目录用于FTP。

我的REMOTE_PATH_TO_ROOT_APP_FOLDER是否使用FTP凭据?如果是,我需要使用哪个URL?

- (void)postExamplesDictionaryToServer:(nonnull NSString *)dName
                                       :(nonnull NSString *)rName
                                       :(nonnull NSData *)jsonData
{
    NSString *userFileURLString = [NSString stringWithFormat:@"%@/%@/%@TESTER.json", REMOTE_PATH_TO_ROOT_APP_FOLDER, dName, rName];
    NSURL    *userFileURL       = [NSURL URLWithString:userFileURLString];

    NSString *postLength        = [NSString stringWithFormat:@"%lu", (unsigned long)[jsonData length]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:userFileURL];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:jsonData];

    [[self.session uploadTaskWithRequest:request fromData:jsonData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
    {
        NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        NSLog(@"Error: %@", error);
    }] resume];
}

编辑:我记录了传递给完成处理程序的NSERROR并得到了这个:

Error: (null)

但是......如果我将URL更改为服务器上已经存在的文件,我会得到:

Error: Error Domain=NSURLErrorDomain Code=-1008 "resource unavailable" 
    UserInfo={NSUnderlyingError=0x7fca8ad44280 {Error Domain=kCFErrorDomainCFNetwork Code=-1008 "(null)"}, 
    NSErrorFailingURLStringKey=ftp://*****:*****@ftp.*****.com/public_html/app/******/File.json, 
    NSErrorFailingURLStringKey=ftp://*****:*****@ftp.*****.com/public_html/app/******/File.json, NSLocalizedDescription=resource unavailable}

这是否意味着它没有尝试上传任务,只是以某种方式提出请求?

0 个答案:

没有答案