2015-05-22 148 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代碼。 –