我用曲别针将文件添加到我的模型。
I use paperclip to add a file to my model.
我想使用Firefox 3.6, xhr.sendAsBinary
,新功能与一个Ajax请求发送一个文件。
I want to use the new feature of firefox 3.6, xhr.sendAsBinary
, to send a file with an ajax request.
下面是我如何建立我的要求:
Here is how I build my request :
var xhr = new XMLHttpRequest();
xhr.open("POST", "/photos?authenticity_token=" + token
+ "&photo[name]=" + img.name
+ "&photo[size]=" + img.size);
xhr.overrideMimeType('text/plain; charset=x-user-defined-binary');
xhr.sendAsBinary(bin);
名称
和尺寸
保存在我的模式没有问题,但文件本身没有被曲别针。逮住
name
and size
are saved in my model without problem but the file itself is not catched by paperclip.
我的模型
class Photo < ActiveRecord::Base
has_attached_file :photo, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
迁移
def self.up
add_column :photos, :photo_file_name, :string
add_column :photos, :photo_content_type, :string
add_column :photos, :photo_file_size, :integer
add_column :photos, :photo_updated_at, :datetime
end
和我的控制器
# POST /photos
# POST /photos.xml
def create
@photo = Photo.new(params[:photo])
respond_to do |format|
if @photo.save
format.html { redirect_to(@photo, :notice => 'Photo was successfully created.') }
format.xml { render :xml => @photo, :status => :created, :location => @photo }
else
format.html { render :action => "new" }
format.xml { render :xml => @photo.errors, :status => :unprocessable_entity }
end
end
end
不知道如何解决这个问题呢?
Any idea how to solve this issue?
感谢
我终于成功了工作!
我的JavaScript发送文件看起来像这样
my javascript sending file looks like this
send : function() {
try {
var xhr = new XMLHttpRequest;
//var url = this.form.action;
var url = '/photos';
var boundary = this.generateBoundary();
var contentType = "multipart/form-data; boundary=" + boundary;
this.filesToUpload.forEach(function(file, index, all) {
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", contentType);
for (var header in this.headers) {
xhr.setRequestHeader(header, headers[header]);
}
var CRLF = "\r\n";
var request = "--" + boundary + CRLF;
request += 'Content-Disposition: form-data; ';
request += 'name="' + 'photo[name]' + '"' + CRLF + CRLF;
request += file.name + CRLF;
request += "--" + boundary + CRLF;
request += 'Content-Disposition: form-data; ';
request += 'name="' + 'photo[photo]' + '"; ';
request += 'filename="'+ file.fileName + '"' + CRLF;
request += "Content-Type: application/octet-stream" + CRLF + CRLF;
request += file.value + CRLF;
request+= "--" + boundary + "--" + CRLF;
xhr.sendAsBinary(request);
});
// finally send the request as binary data
//xhr.sendAsBinary(this.buildMessage(this.filesToUpload, boundary));
} catch(e) {
alert('send Error: ' + e);
}
}
现在回形针处理文件作为一个正常的输入文件
now Paperclip handles the file as a normal input file