我已经多次尝试使用RestKit启用POST图像文件传输,但到目前为止只使用curl成功。工作代码如下,但它是同步的,并且使UI无响应。
NSArray *arguments =
[NSArrayarrayWithObjects:assetScriptFullPath,
@"-F", [NSString stringWithFormat:@"asset[file]=@%@", 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];
服务器收到卷曲调用,如下所示:
{
"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的一次尝试基于这篇文章(RestKit Image Upload),但没有在资产中嵌套文件。我试图将这些参数嵌入“资产”中的尝试没有奏效或已经崩溃。
{
"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>>
}
使用下面RestKit高级教程中描述的方法,我无法获得我需要的层次结构(资产中的文件),或者我无法在不崩溃的情况下获得附加的图像数据。 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"
}
答案 0 :(得分:1)
我们这样做的方法是将图像编码为base64Encoding并在服务器端对其进行解码。
像这样的东西。
NSData *imageData = [NSData dataWithData:imageForUpload];
NSString *encodedString = [imageData base64Encoding];
之后它就像常规的RestKit帖子一样工作。