1

私はウェブサイト開発の初心者です。私は React-Redux と Python をバックエンド (Falcon フレームワーク) として使用しています。

1) Dispatch to POST を使用して、frontEnd から formData() を受け取ります。

私のディスパッチコード:

this.props.dispatch({type: ActionTypes.FILE_UPLOAD_REQUEST, email: this.state.email, file: this.state.policyFile});

ミドルウェアを使用して、関数 POST を呼び出すだけです。

var result = yield call(Atlas.uploadFile, action.email, action.file);

そして私のフェッチ機能:

export const uploadFile = (email, file) => {
    console.log(file);
    return fetch(`${BASE_URL}/v1/files/${email}/policies`, {
        method: 'POST',
        body: file,
        headers:{}
    })
    .then(response => response.json())
}

ファルコン API を使用して、私のバックエンド側:

def on_post(self, req, resp, email):
    local_path = create_local_path(req.url, req.content_type)
    with open(local_path, 'wb') as temp_file:
        body = req.stream.read()
        temp_file.write(body)

問題は、temp_file が作成されましたが、破損しており、拡張子を txt ファイルに変更した後です。コンピューターだけが理解できる奇妙なコードで書かれているはずです。しかし、ファイル全体を破損させるいくつかの行があります。助けてください。これは、次のような txt ファイルです。

------WebKitFormBoundaryQXmL1AgwA112xzkA
Content-Disposition: form-data; name="file"; filename="baboon.jpg"
Content-Type: image/jpeg

ˇÿˇ‡JFIFˇ€Ñ   ( %!1"%)+...383-7(-.+

-% - - - - - - - -。 - - - - - - - - - - - - - - 7 - - -- ˇ¿„フィ"ˇƒˇƒ>!1AQ"aqÅë°2B±¡R—·#brÒÇí¢$3Scˇƒˇƒ'!1QAa"#2BqÅˇ⁄?“G ÷=`^— Á»÷$ìØxıXÄ'Å '‚ 5kÔVãW¶±ÈK@¡tq]~¸¢J^dö±“≈B–Ba.'QoQ∏0dúC•,nı^⁄•1BR¢âò ´Ô¨C⁄ƒXΩ¡ ¨Eb & and keep going

最初の 3 行を見ると、ファイルが破損しています。

何か案が ?

4

1 に答える 1

0

Falcon は、すぐに実行しようとしているようなファイルのアップロードを処理しません。マルチパート/フォームデータを処理するミドルウェアを提供するhttps://github.com/yohanboniface/falcon-multipartのようなものを使用する必要があります。アップロードします。

次のようなミドルウェアを追加します。

from falcon_multipart.middleware import MultipartMiddleware

api = falcon.API(middleware=[MultipartMiddleware()])

おそらくフロントエンドのコードを変更したくなるでしょう ( fetch post with multipart form data を参照)。

これを行うと、次のようなハンドラー コードになる可能性があります ("image" というフォーム フィールドでファイルを渡すと仮定します)。

def on_post(self, req, resp, email):
    local_path = create_local_path(req.url, req.content_type)
    with open(local_path, 'wb') as temp_file:
        body = req.get_param('image')
        temp_file.write(body)
于 2017-10-09T22:23:43.290 に答える