web-dev-qa-db-ja.com

Laravel:画像またはファイルをAPIに送信する方法

クライアント側から画像またはファイルを保存するためのAPI(Lumenによって作成された)があります。

これは私のAPIコードです

if ($request->hasFile('image')) {
    $image = $request->file('image');

    $fileName = $image->getClientOriginalName();
    $destinationPath = base_path() . '/public/uploads/images/product/' . $fileName;
    $image->move($destinationPath, $fileName);

    $attributes['image'] = $fileName;
}

私はすでに郵便配達員でAPIを試しましたが、すべてうまくいき、画像が正常にアップロードされました。

クライアント側から画像を送信し(APIを呼び出す)、APIプロジェクトに画像を保存するためのベストプラクティスは何ですか?私のコードが機能していないからです。

これは、クライアント側で画像ファイルを受信して​​からAPIを呼び出そうとしたときの私のコードです。

if ($request->hasFile('image')) {
    $params['image'] = $request->file('image');
}

$data['results'] = callAPI($method, $uri, $params); 
7
Code On

確かに、フォームから郵送せずにそれを行うことはできません。

別の方法は、リモートURLソースを送信し、次のようにAPIにダウンロードすることです。

if ($request->has('imageUrl')) {

    $imgUrl = $request->get('imageUrl');
    $fileName = array_pop(explode(DIRECTORY_SEPARATOR, $imgUrl));
    $image = file_get_contents($imgUrl);

    $destinationPath = base_path() . '/public/uploads/images/product/' . $fileName;

    file_put_contents($destinationPath, $image);
    $attributes['image'] = $fileName;
}
4

以下の簡単なコードは、postman(API)でファイルをアップロードするのに役立ちました:

このコードにはいくつかの検証もあります。

誰かが必要な場合は、以下のコードをコントローラーに入力してください。

Postmanから:POSTメソッドを使用し、本文とフォームデータを選択し、ファイルを選択し、画像をキーとして使用してから、アップロードする必要のある値からファイルを選択します。

public function uploadTest(Request $request) {

    if(!$request->hasFile('image')) {
        return response()->json(['upload_file_not_found'], 400);
    }
    $file = $request->file('image');
    if(!$file->isValid()) {
        return response()->json(['invalid_file_upload'], 400);
    }
    $path = public_path() . '/uploads/images/store/';
    $file->move($path, $file->getClientOriginalName());
    return response()->json(compact('path'));
 }
3
Touhid