Я пытаюсь загрузить изображение с iPhone на сервер Ruby on Rails (RoR) и получаю следующую ошибку:
!\ FAILSAFE /!\ Thu Nov 11 23:51:39 CET 2010
Status: 500 Internal Server Error
bad content body
/usr/lib/ruby/gems/1.8/gems/rack-1.0.1/lib/rack/utils.rb:319:in `parse_multipart'
Связь с сайтом RoR работает нормально, когда я опускаю строку ниже, где я устанавливаю значение для строки с multipart / form-data.
код iPhone:
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"logo1" ofType:@"png"];
NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
NSString *urlString = [NSString stringWithFormat:@"%@/user/iphone_results_to_website/",
serverString ];
NSMutableURLRequest *imageRequest = [[[NSMutableURLRequest alloc] init] autorelease];
[imageRequest setURL:[NSURL URLWithString:urlString]];
[imageRequest setHTTPMethod:@"POST"];
NSString *boundary = [NSString stringWithString:@"--------------------------- 14737809831466499882746641449"];
// Works fine without this next line:
[imageRequest setValue: [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
NSMutableData *body = [NSMutableData dataWithCapacity:[imageData length] + 512];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"logo1.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[imageRequest setHTTPBody:body];
theConnection = [[NSURLConnection alloc] initWithRequest:imageRequest
delegate:self];
if(theConnection) {
theConnectionData = [[NSMutableData data] retain];
// theData is an instance variable
} else {
// failed to make connection
}
На стороне RoR у меня установлены RMagick, ImageMagick и attachment_fu, и я настроил модель фотографии для attachment_fu как:
RoR Фотомодель:
class Photo < ActiveRecord::Base
has_attachment :storage => :file_system,
:resize_to => '640x480',
:thumbnails => { :thumb => '160x120', :tiny => '50>' },
:max_size => 5.megabytes,
:content_type => :image,
:processor => 'Rmagick'
validates_as_attachment
belongs_to :user
###########################################################################
def uploaded_picture=(picture_field)
self.name = base_part_of(picture_field.original_fielname)
self.content_type = picture_field.content_type.chomp
self.data = picture_field.read
end # uploaded_picture
###########################################################################
def base_part_of(file_name)
File.basename(file_name).gsub(/[^\w._-]/, '')
end # base_part_of
###########################################################################
end
Кто-нибудь знает, в чем может быть проблема? Может ли проблема быть в моем коде Objective-C или на стороне RoR?