2016-06-24 18 views
0

私のプロジェクトの1つをrequestからもう少し軽量(get、axios、またはfetchなど)に切り替える予定です。すべてがスムーズに進行していますが、ファイルストリーム(PUTPOST)をアップロードしようとすると問題が発生します。リクエストパッケージでうまく動作しますが、他の3つのいずれかがサーバから500を返します。ノードHTTP経由のJSアップロードファイルストリーム

私は、一般的に500とはサーバーの終わりに問題があることを知っていますが、テストしているHTTPパッケージとのみ一致しています。 requestを使用するようにコードを戻すと、正常に動作します。ここで

は私の現在のリクエストコードです:私は「GOTのマニュアルに従って

got.put(`http://endpoint.com`, { 
    headers: { 
    'Content-Type': 'multipart/form-data', 
    Authorization: `Bearer ${account.token.access_token}`, 
    }, 
    body: { 
    content: fs.createReadStream(localPath) 
    } 
}) 
    .then(response => { 
    return callback(null, response.body); 
    }) 
    .catch(err => { 
    return callback(err); 
    }); 

、:

Request.put(`http://endpoint.com`, { 
    headers: { 
    Authorization: `Bearer ${account.token.access_token}` 
    }, 
    formData: { 
    content: fs.createReadStream(localPath) 
    } 
}, (err, response, body) => { 
    if (err) { 
    return callback(err); 
    } 

    return callback(null, body); 
}); 

そして、ここでは別のパッケージを(この場合には、得た)を使用しての試みの一つでありますまた、form-dataパッケージをその例に従って使用してみましたが、私は同じ問題を抱えています。

これらの2つの間で収集できる唯一の違いはgotです。手動でContent-Typeヘッダーを指定する必要があります。そうしないと、エンドポイントで適切なエラーが表示されます。そうでなければ、2つのパッケージがどのようにストリームを使ってボディを構築しているのかよく分かりませんが、fetchaxiosは同じエラーをgotとしています。

fetchまたはaxiosを使用してスニペットを使用したい場合は、私も同様に投稿してください。

+0

もしそれが役立つかどうかわかりませんが、入手したドキュメントによると、オブジェクトの本体としてFormDataを渡す必要があります - https://github.com/sindresorhus/got#form-data –

+0

私もこれを試しました。 'form-data'パッケージを使って、' content 'とストリーム情報で 'append'を呼び出しましたが、私はまだ同じ問題を抱えています。私はこれを反映するために私の質問を編集します。 –

答えて

1

このように見えるのはヘッダーの問題です。 FormData(つまりheaders: form.getHeaders())から直接ヘッダーを使用し、後で追加ヘッダーを追加すると(Authorization)、これで正常に動作します。