【问题标题】:Laravel Multiple Image Upload via APILaravel 通过 API 上传多张图片
【发布时间】:2018-12-10 10:05:37
【问题描述】:

我正在创建媒体 API,这是第一次创建 API。

我有这个代码:

/**
* Store a newly created resource in storage.
*
* @param  \App\Http\Requests\UploadRequest $request
* @return \Illuminate\Http\Response
*/
public function store(UploadRequest $request)
{
    if(!$request->hasFile('fileName')) {
        return response()->json(['upload_file_not_found'], 400);
    }
    $file = $request->file('fileName');
    if(!$file->isValid()) {
        return response()->json(['invalid_file_upload'], 400);
    } 

    if($request->hasfile('fileName'))
    {
        $media = new Media();
        $data = array();
        foreach($request->file('fileName') as $image)
        {
            $rdm = uniqid(5);
            $name= $rdm .'-'.$image->getClientOriginalName();
            $image->move(public_path().'/images/', $name);
            $data[] = $name;

        }

        $media->fileName = json_encode($data);
        $media->clientId = $request->clientId;
        $media->uploadedBy = Auth::user()->id;
        $media->save();

    }

    return ["success" => "Your media file has been successfully uploaded"];
}

请您帮我解释为什么它不将图像上传到公共路径中。它也不在数据库中存储任何内容。发送 POST 请求时,我从邮递员那里收到 200 个代码,但是数据库有一个空数组作为文件名?

**** 编辑 ****

我正在上传多张图片。因为我正在为移动应用程序制作 api,所以没有这种形式。该请求是对 URL /api/v1/media 的 POST 请求

【问题讨论】:

  • 您要上传多张图片吗?
  • @LuckySaini 我是的,我现在更新了我的帖子 :)
  • 可以添加表单的 HTML 吗?
  • @StevenHardy 检查public/images 目录权限。这应该是可写目录。
  • 您的请求类型是什么?我的意思是应该是formData

标签: php laravel api


【解决方案1】:

这是我想出的可行的解决方案:)

这会上传多个文件并检查有效文件的扩展名。

public function store(UploadRequest $request)
{
    if(!$request->hasFile('fileName')) {
        return response()->json(['upload_file_not_found'], 400);
    }

    $allowedfileExtension=['pdf','jpg','png'];
    $files = $request->file('fileName'); 
    $errors = [];

    foreach ($files as $file) {      

        $extension = $file->getClientOriginalExtension();

        $check = in_array($extension,$allowedfileExtension);

        if($check) {
            foreach($request->fileName as $mediaFiles) {
                $media = new Media();
                $media_ext = $mediaFiles->getClientOriginalName();
                $media_no_ext = pathinfo($media_ext, PATHINFO_FILENAME);
                $mFiles = $media_no_ext . '-' . uniqid() . '.' . $extension;
                $mediaFiles->move(public_path().'/images/', $mFiles);
                $media->fileName = $mFiles;
                $media->clientId = $request->clientId;
                $media->uploadedBy = Auth::user()->id;
                $media->save();
            }
        } else {
            return response()->json(['invalid_file_format'], 422);
        }

        return response()->json(['file_uploaded'], 200);

    }
}

【讨论】:

    【解决方案2】:

    作为 api 的二进制文件发送。

    php file_get_contents

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 2011-02-21
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-05
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多