2016-12-15 5 views
0

iOS 응용 프로그램에서 작업 중이며 Documentum REST 서비스를 사용하고 있습니다. 지금까지는 모든 "GET"서비스 부분이 서버에서 제대로 응답 한 모든 데이터를 올바르게 처리하고 있습니다. 하지만 이제는 서버에 문서 파일을 업로드하기 위해 "POST"부분을 수행해야합니다.iOS에서 Documentum REST Services를 사용하여 파일 (pdf, doc, xls) 게시 Objective C

하지만 서버에서 오류가 발생했습니다.

다음 코드는 서버에 문서 파일을 업로드하는 데 사용되며 자세한 오류 메시지도 제공합니다.

코드 :

(IBAction)btnPostDocumentToServer:(id)sender { 
    NSString *filePath=[[NSBundle mainBundle] pathForResource:@"demotpcode" ofType:@"pdf"]; 
    NSData *pdfData = [NSData dataWithContentsOfFile:filePath]; 
    [self postMultipart:@"http://devser1:9090/dctm-rest/repositories/Mobile/folders/0b03445d800bfa1f" fileName:@"temCodeiOS" file:pdfData progress:nil params:nil]; 
} 

(void)postMultipart: (NSString*) url fileName: (NSString*)name file:(NSData*) fileData progress:(UIProgressView*) progressView params:(NSDictionary*) parametersDictionary { 
    NSDictionary *meta = @{@"properties":@{@"r_object_type": @"ecr_attachment", @"document_id": @"0903445d80210726",@"object_name": @"temCodeiOS.pdf",@"a_content_type":@"pdf",@"subject":@"new Doc from iOS Device"}}; //@{@"propreties": @{@"object_name": name}}; // You can modify this part to add more detail.  
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    [manager.requestSerializer setAuthorizationHeaderFieldWithUsername:[[NSUserDefaults standardUserDefaults] stringForKey:@"username"] password:[[NSUserDefaults standardUserDefaults] stringForKey:@"password"]]; 

    NSMutableURLRequest *request=[manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:url parameters:parametersDictionary constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ 
     [formData appendPartWithFileData:metaData name:@"metaData" fileName:@"metaData" mimeType:@"application/json"]; 
     [formData appendPartWithFileData:fileData name:@"binary" fileName:name mimeType:@"text/plain"]; 
    } error:nil]; 

    NSURLSessionUploadTask *uploadTask; // Create resumable task 
    uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [progressView setProgress:uploadProgress.fractionCompleted]; //Update the progress view 
     }); 
    } 
    completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 
     if (error) { 
      NSLog(@"Error: %@", error); 
     } else { 
      NSLog(@"%@ %@", response, responseObject); 
     } 
    }]; 

    [uploadTask resume]; 
} 

상세 ERROR : 나는 Xcode 8.1, iOS 10.1 SimulatorAFNETWorking 3.0을 사용하고

Error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)" UserInfo={NSUnderlyingError=0x600000056350 {Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: application/vnd.emc.documentum+json" UserInfo={com.alamofire.serialization.response.error.response= { URL: http://devser1:9090/dctm-rest/repositories/Mobile/folders/0b03445d800bfa1f } { status code: 400, headers { Connection = close; "Content-Type" = "application/vnd.emc.documentum+json;charset=UTF-8"; Date = "Thu, 15 Dec 2016 06:46:20 GMT"; Server = "Apache-Coyote/1.1"; "Transfer-Encoding" = Identity; } }, NSErrorFailingURLKey= http://devser1:9090/dctm-rest/repositories/Mobile/folders/0b03445d800bfa1f , com.alamofire.serialization.response.error.data=<7b227374 61747573……>, NSLocalizedDescription=Request failed: bad request (400)}

. 제발 이걸 이해하고 제가 사용하는대로 안내하겠습니다. AFNETWorking 처음. 미리 감사드립니다. Documentum의 REST 서비스를 호출 할 때

+0

질문 서식을 조금 더 자세하게 지정하십시오. 당신의 질문에 대답하는 사람들이 당신의 노력을 기대하고 있는지 질문 할 때 노력을 기울이십시오. ;) – Miki

답변

0

당신이 잘못 콘텐츠 형식 값을 사용하고 있습니다 :

"Request failed: unacceptable content-type: application/vnd.emc.documentum+json" 

내가 떨어져 Documetnum XCP 2.X에서 Documentum의 REST를 사용하지 않은, 그러나 모든 경우 application/json에서 오른쪽 콘텐츠 -이었다 유형 (나는 그것이 작동한다는 것을 말하는 것이 아니라, 단지 당신의 서비스가 기대하는 것을 체크 아웃한다).

+0

Thanks Miki 귀하의 빠른 응답을 위해 올바른 내용 유형을 어떻게 그리고 어디서 설정할 수 있습니까? –

+0

정말 모르겠다. Objective-C의 라인을 작성한 적이 없으며 제공 한 코드에서 어디에도 설정할 수 없다는 것을 알 수 없다. – Miki

+0

미키 나는 또한 이것을 읽음으로써 깨닫는다. 오류 나는 어떤 내용 유형을 설정하지 않는다. 그러면 내용 유형을 어떻게 설정 하는가? application/vnd.emc.documentum + json. 사실, 헤더 값을 수정하는 데 도움이 필요합니다. 게시 이유는 무엇입니까? 더 많은 도움이 될 것이라고 생각해주십시오. –