【发布时间】:2013-03-01 11:46:28
【问题描述】:
我快到了,但我在解码文件时遇到了问题。解码时文件不正确。
我用来上传文件的代码:
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'),我会收到类似Encoding::UndefinedConversionError - "\xAB" from ASCII-8BIT to UTF-8 的错误。另一方面,如果我用'wb' 打开,结果文件是混合的,无法读取。
我已经为文件编码添加了元标记<meta charset="utf-8" />,但没有任何区别。
如果有人有任何提示,将不胜感激。
【问题讨论】:
-
如果您在表单 DOM 对象上调用 FormData,它将从文件类型的输入为您编码文件: new FormData($('form'));否则,您需要在将文件添加到 FormData 对象之前对文件进行编码。
-
目前使用上面的设置,参数看起来像 "datafile"=>"data:text/csv;base64,SUR4CUluZ... 这就是为什么我认为它已经在 base64 中编码。
-
我最终使用了jquery-fileupload,这让它变得非常简单。
标签: ruby-on-rails ajax file-upload ember.js decode