Laravel:如何通过 API postman 上传图像并将其保存到数据库(phpmyadmin)

Posted

技术标签:

【中文标题】Laravel:如何通过 API postman 上传图像并将其保存到数据库(phpmyadmin)【英文标题】:Laravel: How to upload image and save it to database(phpmyadmin) via API postman 【发布时间】:2021-09-01 22:58:13 【问题描述】:

我想知道如何通过 Laravel 中的 API 邮递员上传图片并保存到我的数据库 这是phpMyAdmin。当我尝试在邮递员中运行我的代码时,这就是显示的内容:

"image null" 

这是我目前的代码:

横幅 CRUD 控制器:

    <?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Banner;
use Illuminate\Http\Request;

class BannerCRUDController extends Controller

    /**
    * Display a listing of the resource.
    *
    * @return \Illuminate\Http\Response
    */
    public function index()
    
        $banners = Banner::all();
        return response($banners,200);
    
 
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    
        //
    
 
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    
        $data = $request->validate([
            'id'=>'required',
            'web_banner_profile'=>'required',
        ]);
 
        $image = $request->file('image');
        if($request->hasFile('image')) 
            $new_name = rand() . '.' . $image->getClientOriginalExtension();
            return response()->json($new_name); 
        else
            return response()->json('image null');
        

        $banners = Banner::create($data);

        return response ($banners, 200);
    
 
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    
        //
    
 
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    
        //
    
 
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    
       //
    
 
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    
       //
    
 
 

横幅模型:

    <?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Banner extends Model

    public $table = "webinar";
    use HasFactory;

    protected $fillable = [
        'id',
        'web_banner_profile',
    ];

关于我做错了什么的任何想法,我想马上得到这个,因为我需要创建很多表。

希望有人可以帮助我开始。非常感谢。

【问题讨论】:

坦率地说,没有人关心 Postman(尤其是当它是自己的 API 时)。我只能看到一个低质量的问题和符合这些标准的答案。最好用你自己的表格发帖,那样它可能会显得更严重。这个问题就像“如何将文件输入添加到 html 表单中?”然后甚至表达了一些紧迫感。我建议阅读说明手册,首先是:***.com/help/asking 这能回答你的问题吗? How to upload a file and JSON data in Postman? 【参考方案1】:

您只需使用此代码上传图像并在邮递员中选择类型文件

public function store(Request $request)
    
        $data = $request->validate([
            'id'=>'required',
            'web_banner_profile'=>'required',
        ]);
 
        $image = $request->file('image');
        if($request->hasFile('image')) 
            $image = time() . '.' . $request->image- 
           >getClientOriginalExtension();
           $request->image->move(public_path('Your Path'), $image);
           $banner->image = 'Your Path' . $image;
   
            return response()->json($image); 
        else
            return response()->json('image null');
        

        $banners = Banner::create($data);

        return response ($banners, 200);
    

【讨论】:

我应该把它放在横幅 CRUD 控制器的哪一行?【参考方案2】:

在您的 BannerCRUDController.php 中将 store 函数替换为以下内容。 在存储中创建images 目录。

public function store(Request $request)
    
        $data = $request->validate([
            'id'=>'required',
            'web_banner_profile'=>'required',
        ]);
 
        $image = $request->file('image');
        if($request->hasFile('image')) 
             $image = $request->file('image');
             $destinationPath = storage_path('images');
             $fileName = str_random(6) . time() . "." . $image->getClientOriginalExtension();
             $image->move($destinationPath, $fileName);
             $banner = new Banner();
             $banner->web_banner_profile = $fileName:
             $banner->save()
            return response()->json($fileName); 
        else
            return response()->json('image null');
        

      
    

图片将上传到storage/images

【讨论】:

我也没有保存在数据库和storageimages中。【参考方案3】:

错误是清除请求有空图像。所以你应该在邮递员中选择密钥类型文件

【讨论】:

是的,我做到了 @Mhoreen。你仍然得到错误然后 dd($request->all());

以上是关于Laravel:如何通过 API postman 上传图像并将其保存到数据库(phpmyadmin)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Sanctum Token API 身份验证在 Postman 中不起作用

使用 POSTMAN 测试 Laravel API 路由

Laravel API 调用失败。 PostMan 使用 Basic Auth 覆盖 Authorization 标头

对 API 的请求在 Postman 中有效,但在我尝试使用 laravel/guzzle 时无效

如何使用 Postman 处理 Laravel $_POST 请求

Laravel 5.3 Passport API 在 Postman 中使用个人访问令牌未经身份验证