Laravel:如何将图像或文件发送到API

Cod*_* On 7 php api laravel lumen

我有一个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;
}
Run Code Online (Sandbox Code Playgroud)

我已经在邮递员中尝试了API,一切顺利,图像成功上传.

从客户端发送图像(调用API)并将图像保存在API项目中的最佳做法是什么?因为我的代码无效

这是我尝试在客户端接收图像文件时的代码,然后调用API.

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

$data['results'] = callAPI($method, $uri, $params); 
Run Code Online (Sandbox Code Playgroud)

Tou*_*hid 8

下面的简单代码适用于我使用邮递员(API)上传文件:

此代码也有一些验证。

如果有人需要将下面的代码放入您的控制器。

来自邮递员:使用 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'));
 }
Run Code Online (Sandbox Code Playgroud)


Fil*_*ski 4

事实是,如果不通过表格邮寄,您将无法做到这一点。

另一种方法是发送远程 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;
}
Run Code Online (Sandbox Code Playgroud)