我快到了,但是我遇到了解碼文件的問題。解碼文件時不正確。ember文件上傳到rails,使用base64進行編碼和解碼
,我用它來上傳文件中的代碼:
createDataSet: function() {
var data = new FormData();
data.append('original_filename', this.get('fileName'));
data.append('datafile', this.get('newData'));
data.append('project_id', this.get('content.id'));
data.append('name', this.get('content.name'));
$.ajax({
url: '/data_sets.json',
data: data,
cache: false,
contentType: false,
processData: false,
dataType: 'json',
type: 'POST',
success: function(data) {
alert('ok');
},
error: function(xhr, data, errorThrown) {
alert('error');
}
});
}
在鐵軌邊,我想用下面的方法來挑這個了:如果我使用File.open(datasetfilename, 'w')
def create
# take care of the attachement
datasetfilename = Pathname.new(params[:original_filename]).basename
newfile = File.open(datasetfilename, 'w') do |f|
f.write(Base64.decode64(params[:datafile]))
end
@dataset = DataSet.new
@active_data_set = @dataset.active_data_sets.build
@active_data_set.project_id = params[:project_id]
@active_data_set.save
@dataset.name = params[:name]
@dataset.filename = datasetfilename
@dataset.tempfilename = @dataset.savefile newfile
@dataset.save
end
我得到這樣一個錯誤Encoding::UndefinedConversionError - "\xAB" from ASCII-8BIT to UTF-8
。另一方面,如果我用'wb'
打開,則生成的文件混在一起,無法讀取。
我已經爲文件編碼<meta charset="utf-8" />
添加了元標記,但沒有任何區別。
如果有人有任何暗示,將不勝感激。
如果調用FORMDATA形式DOM對象上它會爲你的文件,從文件類型的輸入編碼:新FORMDATA($('形式「));否則,您需要在將文件添加到FormData對象之前對其進行編碼。 – buuda 2013-03-13 14:02:39
目前的設置上面的參數看起來像「datafile」=>「data:text/csv; base64,SUR4CUluZ ...這就是爲什麼我認爲它已經在base64編碼 – Rudi 2013-03-13 14:25:55
我結束了使用[jquery- fileupload](https://github.com/blueimp/jQuery-File-Upload),這使得它非常簡單。 – Rudi 2013-03-14 13:11:48