Ember Jsからajaxを使用してcsvファイルをアップロードし、それをRailsアプリケーションで読み込もうとしています。 私は2つの異なるアプローチを試みました。Ember JsからRailsにAjaxを使用してCSVファイルを送信
submitImport() {
var fd = new FormData();
var file = this.get('files')[0];
fd.append("csv_file", file);
return this.get('authAjax')
.request('/contacts/import/csv', {
method: 'POST',
processData: false,
contentType: false,
data: fd
});
}
をしかし、問題は、私はRailsアプリケーションでcsv_fileのPARAMを取得しないことです:最初の1で私はこのようなエンバーからファイルを送信しようとしました。 request.content_typeはapplication/x-www-form-urlencoded
で、マルチパートフォームが必要です。私はreques.raw_postを使用することができましたが、次に------WebKitFormBoundarymgBynUffnPTUPW3l\r\nContent-Disposition: form-data; name=\"csv_file\"; filename=\"elevatr_import.csv\"\r\nContent-Type: text/csv\r\n\r\ngeorgica,[email protected]\nleo, [email protected]\ngigel, [email protected]\n\r\n------WebKitFormBoundarymgBynUffnPTUPW3l--\r\n
のようなものが得られました。何とかこれを解析する必要があります。このソリューションは本当に好きではありません。
もう1つの方法は、base64でエンコードされたファイルを送信し、それをRailsからデコードすることでした。
`
submitImport() {
var fd = new FormData();
var file = this.get('files')[0];
this.send('getBase64', file);
var encoded_file = this.get('encoded_file');
return this.get('authAjax')
.request('/contacts/import/csv', {
method: 'POST',
data: { csv_file: encoded_file }
});
},
getBase64(file) {
var controller = this;
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
controller.set('encoded_file', reader.result);
};
}
をしかし、いくつかの理由で、ポストの要求は、最初で唯一のgetBase64メソッドが呼び出されたことを後に提出されている:私はこれを試してみました。 これはなぜ起こっているのですか、別の方法を使用すべきかどうかは誰にも分かりますか?
おかげ
ご回答ありがとうございます。私は実際にあなたのコードを使ってファイルをエンコードして送ることができました。 'authAjax'サービスも見ていきます。おそらく私はこれを理解することができます。 –