2013-05-13 103 views
0

我遇到了一個嚴重的問題,並且沒有找到解決方案就搜索了很多小時。將圖像從RestKit上傳到RoR後端406時

我有一個使用Ruby of Rails和回形針進行圖像保存的後端服務器。

的圖片上傳工作正常,從瀏覽器,張貼到/圖片

但是,當我試圖把它上傳使用與RestKit(IOS)multipart請求到/pictures.json,我得到一個406

當圖像(圖片對象)在服務器端創建時,獎勵(獎勵對象)與其相關聯。這個獎勵對象就是我期待的JSON響應。

這裏是Objective-C代碼:

NSMutableURLRequest* uploadRequest = [self.objectManager multipartFormRequestWithObject:nil method:RKRequestMethodPOST 
path:@"/pictures.json" 
parameters:nil 
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     [formData 
     appendPartWithFileData:UIImagePNGRepresentation(socialReward.image) 
     name:@"picture[pict]" 
     fileName:imageName 
     mimeType:@"image/png"]; 
}]; 

這裏是控制器:

@picture = Picture.create(params[:picture]) 

respond_to do |format| 
    format.html { 
     redirect_to @picture.reward 
    } 
    format.js { 
     render :json => @picture.reward.to_json(:include => :picture) 
    } 
end 

的跨站請求僞造支票被禁用。

使用Wireshark比較來自瀏覽器和iOS的請求時,它們非常相似。

在此先感謝您的幫助。

+0

相似 - 有什麼不同? RestKit是否將accept頭設置爲顯示它期望從服務器返回JSON? – Wain 2013-05-13 08:54:19

+0

感謝您的回覆。主體是一樣的(除了來自瀏覽器的請求中存在的不同邊界名稱和authenticity_token)。瀏覽器請求中的Accept是「text/html,application/xhtml + xml,application/xml; q = 0.9,*/*; q = 0.8」。在RestKit中是「application/json」。但這是正確的,因爲我期待JSON的迴應。 – 2013-05-13 08:59:39

回答

1

問題是與RoR,在respond_to你應該使用format.json,而不是format.js

+0

非常感謝,這是問題! – 2013-05-13 15:34:34