web-dev-qa-db-ja.com

Laravel Postmanを使用したファイルアップロードAPI

コントローラーに次のコードがあります。

    public function upload(Request $request)
    {
       $files = $request->file('uploads');
       if(!empty($files)) {
           foreach($files as $file) {
               Storage::put($file-getClientOriginalName(),file_get_contents($file));
        }
    }

routesapi.phpを介して呼び出されます:

Route::post('/upload', [ 'uses' => 'UploadController@upload' ]);

私は郵便配達員を使用してアプリケーションをテストしています。

ヘッダー:

enter image description here

ボディ:

enter image description here

生:

POST/scotic/public/api/upload HTTP/1.1ホスト:127.0.0.1:80コンテンツタイプ:multipart/form-data; boundary = ---- WebKitFormBoundary7MA4YWxkTrZu0gW Cache-Control:no-cache Postman-Token:0caf7349-5c91-e5f1-766f-72a3f1e33900

------ WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition:form-data; name = "uploads []"; filename = "banana.png" Content-Type:image/png png data goes here .. ------ WebKitFormBoundary7MA4YWxkTrZu0gW--

$filesは、ファイルのアップロード時には空です。何が間違っていますか?

少し掘り下げた後、私は郵便配達員なしでアップローダーを動作させましたが、郵便配達員のContent-Typeに '--boundary'がないことに気付きました。 LHSは機能しますが、RHS(郵便配達員)は機能しません。

enter image description here

何か案は?

7
Starfish

問題は、postmanでContent-Typeを明示的に指定していたことです。

これからの回答の1つによると post

Content-typeヘッダーを手動で追加する必要はありません。 Postmanによって設定された値をオーバーライドしています。 POSTリクエストでform-dataを選択し、リクエストを送信して、機能するかどうかを確認します。

6
Starfish