2015-05-22 77 views
0

我们想用NSURLSession上传。 下面是代码在目标C端:使用[defaultSession uploadTaskWithRequest:request fromFile:fileURL]上传的文件;不在服务器端上传文件

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"uploadFileServer"]; 

NSString *[email protected]"testing.jpg"; 
    image_name=[fileDest stringByAppendingPathComponent:image_name]; 

NSMutableURLRequest *request =[[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:urlString]]; 

NSString *boundary = @"14737809831466499882746641449"; 

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];; 

[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

[request setHTTPMethod:@"PUT"]; 

NSURLSession *defaultSession= [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue: 
[NSOperationQueue new]]; 

NSURL *fileURL =[NSURL fileURLWithPath:image_name]; 

NSURLSessionUploadTask *uploadTask = [defaultSession uploadTaskWithRequest:request fromFile:fileURL]; 

[uploadTask resume]; 

在服务器端的文件没有收到。 下面是在服务器端代码:

<?php 

$body = ''; 
$fh = @fopen('php://input', 'r'); 
if ($fh) 
{ 

    while (!feof($fh)) 
    { 
    $s = fread($fh, 1024); 
    if (is_string($s)) 
    { 
     $body .= $s; 
    } 
    } 
    fclose($fh); 
} 

?> 

如果我们上传文件的数据,它工作正常,但对我的要求我必须使用方法 上传文件的背景 - (NSURLSessionUploadTask *)uploadTaskWithRequest:(的NSURLRequest *)要求fromFile:(NSURL *)fileURL;

请指导我们。

+0

回复:“如果我们上传文件的数据,它工作正常”。你什么意思?你能提供可以正常工作的代码吗? – Avt

+0

如果我使用以下方法上传图像数据,那么它工作正常。 NSURLSessionUploadTask * uploadTask = [defaultSession uploadTaskWithRequest:request fromData:imageData]; fromData:为imageData]; –

+0

有什么想法?从服务器端的php代码似乎有问题。 –

回答

0

最后,我已经解决了我的问题。这里是解决方案:

NSString *image_name= fileName; 
    image_name=[fileDest stringByAppendingPathComponent:image_name]; 
    NSMutableData *imageData=[[NSMutableData alloc] init]; 
    NSMutableURLRequest *request =[[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:fileUploadURL]]; 
    NSString *boundary = @"14737809831466499882746641449"; 
    NSString *requestContentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];; 
    [request addValue:requestContentType forHTTPHeaderField: @"Content-Type"]; 
    [request setHTTPMethod:@"PUT"]; 
    [imageData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [imageData appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data; name=\"image\"; filename=\"%@\"\r\n",image_name] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [imageData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [imageData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    NSURL *fileURL =[NSURL fileURLWithPath:image_name]; 
    NSURLSessionUploadTask *uploadTask = [uploadSession uploadTaskWithRequest:request fromFile:fileURL]; 

    NSMutableDictionary *UploadInfo = [NSMutableDictionary dictionary]; 
    [UploadInfo setObject:fileURL forKey:kMZUploadKeyURL]; 
    [UploadInfo setObject:fileName forKey:kMZUploadKeyFileName]; 
    NSError *error = nil; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:UploadInfo options:NSJSONWritingPrettyPrinted error:&error]; 
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

    [uploadTask setTaskDescription:jsonString]; 
    [uploadTask resume]; 
0

检查是否已在项目选项启用后台模式:

enter image description here

+0

我在当应用程序在foreground.Using方法 上传文件 - (NSURLSessionUploadTask *)uploadTaskWithRequest:(*的NSURLRequest)请求FROMFILE:(NSURL *)fileURL 文件没有上传,但能够使用方法 NSURLSessionUploadTask * uploadTask上传文件= [defaultSession uploadTaskWithRequest:request fromData:imageData]; 所以它似乎有问题从服务器端PHP代码。 –