0

HTML5<input type="file"/>を使用して、Flaskを実行しているサーバーにファイルをアップロードしようとしています。

これを行う方法を説明するまともな記事があります。ただし、以下を使用してサーバーに送信されたデータを取得することをお勧めします。

PHP:$ _SERVER ['HTTP_X_FILE_NAME']
Rails:request.env ['HTTP_X_FILE_NAME']
Django:request.META ['HTTP_X_FILE_NAME']

残念ながら、Flaskで上記に相当するものはわかりません。私の読書に基づいて、私は試しました:

  1. request.data
  2. request.stream.read()
  3. request.input_stream.read()
  4. request.input_stream.read(request.headers.get('content-type'、type = int)または0)

残念ながら、期待どおりに機能するものはなかったようです。

Chromeを使用してファイルをアップロードしています:

var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload/uri', true);
xhr.send(file);

Chromeでは、転送を開始した後、開発ツールのこの特定のPOSTのネットワーク転送のヘッダーContent-Lengthで、アップロードされるファイルのサイズに正確に設定されます。これは、ファイルが実際に送信されていることを示しています。

Flaskで送信されているファイルにアクセスする方法、またはHTML5ファイルをサーバーに送信する方法を知りたいです。

4

1 に答える 1

1

あなたが参照している記事の更新を見たことがありますか?FormData今すぐ使用して、ブラウザのアップロードとは異なる方法でAJAXのアップロードを処理する必要をなくすことができます。

記事からの引用:

var form = document.getElementById('form-id');
var formData = new FormData(form);

send()この新しいFormDataインスタンスは、呼び出しを渡すために必要なすべてです。

var xhr = new XMLHttpRequest();
// Add any event handlers here...
xhr.open('POST', '/upload/path', true);
xhr.send(formData);

これにより、ファイル入力だけでなく、フォームのすべてのフィールドを含むAjaxリクエストが送信されます。テキスト領域、テキストフィールド、チェックボックス、またはあなたが持っているものもあった場合は、それらも送信されます。onprogressまたはなど、聞いている可能性のあるすべてのイベントが呼び出されonreadystatechangeます。

于 2012-11-29T21:59:30.113 に答える