RestKit으로 POST 이미지 파일 전송을 여러 번 시도했지만 curl을 사용하여 지금까지 성공했습니다. 아래 작업 코드가 있지만 동기식이며 UI가 응답하지 않습니다. RestKit와RestKit 이미지 업로드 매개 변수
{
"asset"=>{
"file"=>#<ActionDispatch::Http::UploadedFile:0xcfcc630
@original_filename="IMG_6236.JPG",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"asset[file]\"; filename=\"IMG_6272.JPG\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/tmp/RackMultipart20121117-21489-brm3b9>>,
"user_id"=>"522",
"checksum"=>"ab23bc492bac990d9022248315c743c1"
}
}
한 시도는이 게시물 (RestKit Image Upload)를 기반으로하지만, 자산 내에서 둥지 파일을하지 않습니다
NSArray *arguments =
[NSArrayarrayWithObjects:assetScriptFullPath,
@"-F", [NSString stringWithFormat:@"asset[file][email protected]%@", fullPath],
@"-F", [NSString stringWithFormat:@"asset[user_id]=%d", user_id],
@"-F", [NSString stringWithFormat:@"asset[checksum]=%s", [(NSString *)md5hash UTF8String]],
nil];
NSTask *task = [NSTasklaunchedTaskWithLaunchPath:@"/usr/bin/curl"arguments:arguments];
컬 호출은 다음과 같이 서버에서 수신된다. '자산'내의 매개 변수를 중첩하려는 시도가 작동하지 않거나 충돌했습니다. 나는 (자산 내에서 파일)이 필요하거나 내가 사고없이 첨부 된 이미지 데이터를 얻을 수없는 계층을 얻을 수없는 I 중 하나를 아래 RestKit 고급 튜토리얼에 기술 된 방법을 사용하여
{
"user_id"=>"522",
"checksum"=>"ab23bc492bac990d9022248315c743c1",
"file"=>#<ActionDispatch::Http::UploadedFile:0x883eb9c
@original_filename="file",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"file\"; filename=\"file\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/tmp/RackMultipart20121125-25702-ac8ck9>>
}
. 나는 충돌의 원인이되는 이미지를 첨부하려고 https://github.com/RestKit/RestKit/blob/master/Docs/MobileTuts%20Advanced%20RestKit/Advanced_RestKit_Tutorial.md 방법 중 하나는 여기에 설명되어 있습니다 : Serialize nested image in RestKit (Rails Backend)
{
"asset"=>{
"user_id"=>"522",
"file"=>"@/Users/dev/IMG_6236.JPG",
"checksum"=>"ab23bc492bac990d9022248315c743c1"
}
}
모든 권고를? 감사!
서버가 기대하는 바를 바꿀 수 있으면 플랫 매개 변수 계층 구조로 작업 할 수 있습니다. 이것은 해결책이 아니며, 계층 구조를 변경할 수 없습니다. 코드는 다음과 같습니다.
[params setFile:asset forParam:@"file"];
[params setData:[name dataUsingEncoding:NSUTF8StringEncoding] forParam:@"name"];
[params setData:[user_id dataUsingEncoding:NSUTF8StringEncoding] forParam:@"user_id"];
[client post:assetScriptPath params:params delegate:self];
이것은 서버에서 보는 것입니다. 위와 같이 "자산"내에이 모든 것이 필요합니다.
{
"file"=>#<ActionDispatch::Http::UploadedFile:0xcfcc630
@original_filename="IMG_6236.JPG",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"file\"; filename=\"IMG_6272.JPG\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/tmp/RackMultipart20121117-21489-brm3b9>>,
"user_id"=>"522",
"checksum"=>"ab23bc492bac990d9022248315c743c1"
}
빠른 응답을 보내 주셔서 감사합니다. base64Encoding 선택기가 없다는 오류가 나타납니다. 내가 도대체 뭘 잘못하고있는 겁니까? –
언급 했어야합니다. MGTwitterEngine.https의 Base64 추가 정보를 사용하고 있습니다. //github.com/mattgemmell/MGTwitterEngine/blob/master/NSData%2BBase64.m –
고마워, base64 인코딩 이미지를 보내야합니다. 불행히도 다른 것들이 그것에 의존하기 때문에 나는 서버 측을 바꿀 수 없다. –