Я почти у меня есть, но у меня проблема с расшифровкой файла. При декодировании файл неправильный.Загрузка файла ember в рельсы, кодирование и декодирование с 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');
}
});
}
На стороне Rails Я пытаюсь забрать это с помощью следующего метода:
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
Если я использую File.open(datasetfilename, 'w')
I получите ошибку, подобную этой Encoding::UndefinedConversionError - "\xAB" from ASCII-8BIT to UTF-8
. С другой стороны, если я открываю с 'wb'
, результирующий файл смешивается и не может быть прочитан.
Я уже добавил метатег для кодировки файла <meta charset="utf-8" />
, но без какой-либо разницы.
Если у кого-нибудь есть намек, который будет оценен.
Если вы звоните FormData на объект формы DOM будет кодировать файл для вас от входа типа файла: новый FormData ($ ('форма «)); В противном случае вам нужно будет закодировать файл перед его добавлением в объект FormData. – buuda
На данный момент с настройкой выше параметры выглядят как «datafile» => «data: text/csv; base64, SUR4CUluZ ... Вот почему я предположил, что он был закодирован уже в base64. – Rudi
В итоге я использовал [jquery- fileupload] (https://github.com/blueimp/jQuery-File-Upload), что сделало его очень простым. – Rudi