0

백그라운드 세션에서 장치의 사진에서 이미지를 업로드 할 수 없습니다. 내가 전화 할 때 [세션 uploadTaskWithRequest : REQ의 FROMFILE는 : NSURL] 시스템은 즉시 콘솔에백그라운드 세션 (iOS)에서 이미지 파일을 업로드하는 방법은 무엇입니까?

Failed to issue sandbox extension for file file:///var/mobile/Media/DCIM/103APPLE/IMG_3984.JPG, errno = 1 

을 전송하여 뿌려줍니다. 내가의 밖으로있는 NSData 객체를 생성하는 경우 : (I 필요, [ID NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier] 대신) 내가 [NSURLSessionConfiguration defaultSessionConfiguration] 내 NSURLSessionConfiguration를 만들 경우, 그러나

(A 비슷한 스택 오버플로 문제가 here입니다) NSURL을 업로드하고 파일 (백그라운드 세션에서 필요함)에서 직접 업로드하지 않고 업로드하면 업로드가 성공합니다. Btw 나는 우리의 Rackspace Cloud 계정에 파일을 업로드하고 있으며 간단한 Postman PUT으로 성공적으로이 작업을 수행 할 수 있습니다. 내가 uploadObject에 보내 Btw는

PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:state.arrImagesToBeUploaded options:nil]; 

    PHAsset *phAsset = [fetchResult objectAtIndex:0]; // yes the 0th item in array is guaranteed to exist, above. 
    [phAsset requestContentEditingInputWithOptions:nil 
            completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) { 

             NSURL *imageURL = contentEditingInput.fullSizeImageURL;       
             [self uploadObject:imageURL]; 

            }]; 

내가 처음 NSURL을 확인 :

-(void) uploadObject:(NSURL*)urlToBeUploadedIn 
{ 
    NSDictionary *headers = @{ @"x-auth-token": state.tokenID, 
          @"content-type": @"image/jpeg", 
          @"cache-control": @"no-cache" }; 

    // create destination url for Rackspace cloud upload 
    NSString *sURL = [NSString stringWithFormat:@"%@/testing_folder/%@.jpg", state.publicURL, [state generateImageName]]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:sURL] 
                 cachePolicy:NSURLRequestUseProtocolCachePolicy 
                timeoutInterval:10.0]; 
    [request setHTTPMethod:@"PUT"]; 
    [request setAllHTTPHeaderFields:headers]; 

    self.sessionIdentifier = [NSString stringWithFormat:@"my-background-session"];  
    // NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; // when I use this instead of the line below the sandbox error goes away 
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:self.sessionIdentifier]; 
    self.session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil]; 

    NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:request fromFile:urlToBeUploadedIn]; 

    [uploadTask resume]; 
} 
uploadObject를 호출

내 호출이 :처럼 보이는

문제는 보이는 내 uploadObject 방법에서 발생합니다 fileExistsAtPath에 대한 호출과 함께 : 그래서 파일에 대한 내 참조가 좋다는 것을 알고 있습니다. 마지막으로, 내 대표는 내가 결코 제대로 이미지를 수신 서버에서 다시 무언가를 얻고,

(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)dataIn 

(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error does get invoked, although the data 

서버에 의해 호출합니까 호출 (응답 구문 분석하지 않습니다 있지만) 그래서.

답변

0

해결 방법은 먼저 업로드 할 이미지를 앱의 샌드 박스에 복사하는 것입니다. 내가 사용 :

NSError *err; 
BOOL bVal = [myNSDataOb writeToURL:myDestinationURL options:0 error:&err]; 

을 내 응용 프로그램의 '문서'디렉토리에 복사, 그러나 사람은 또한 사용할 수 있습니다 :

NSError *err; 
BOOL bVal = [[NSFileManager defaultManager] copyItemAtURL:myImageURL toURL:myDestinationURL error:&err];