我已经多次尝试使用 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];
在服务器上接收到 curl 调用,如下所示:
{
"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 此处描述了我尝试附加导致崩溃的图像的一种方法: 序列化 RestKit 中的嵌套图像(Rails 后端)
{
"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"
}