首页 > 解决方案 > 使用 laravel 进行多文件上传和位置存储

问题描述

我有一个存储用户音乐的应用程序。用户可以一次上传多个文件。但是在添加此代码时,数据库和控制器只上传第一个文件,丢弃其他文件。我需要解决这个问题。有什么解决办法吗?

上传控制器.php

 public function store(Request $request)
{
    //This is a complex way to store user id. If any easy way, then help me.
    $curruser = auth()->user();
    $userid = $curruser->id;
    $songs = $request->file('songs');
    $paths = [];

    if(!empty($songs)){
        foreach ($songs as $song){
            $filename = $song->getClientOriginalName();
            $filesize = $song->getSize();
            $extension = $song->getClientOriginalExtension();
            $paths[] = $song->storeAs('songs',$filename);

            $path = new MusicUpload(array(
                'user_id' => $userid,
                'filename' => $filename,
                'extension' => $extension,
                'filesize' => $filesize,
            ));

            $path->save();
            $paths[] = $path;

            return redirect('/fileupload')->with('success','Uploaded successfully');

        }
    }
}

而且我无法将文件的位置存储在 mysql 服务器中。任何想法也可以做到这一点。谢谢

标签: phplaravellaravel-query-builder

解决方案


用这个

public function store(Request $request)
{
    $input = $request->all();
    $rules = array(
        'songs.*' => 'required|mimes:jpeg,png,jpg,doc,docx,pdf,mp4,mov,ogg,qt',  //etc
    );
    $validator = Validator::make($input, $rules);
    if ($validator->fails()) {
        $arr = array("status" => 400, "message" => $validator->errors()->first(), "data" => array());
    } else {
        try {
            $datas = [];
            $result = [];
            if ($request->hasfile('songs')) {
                foreach ($request->file('songs') as $key => $file) {
                   
                    $name = $file->getClientOriginalName();
                    $extension = $file->getClientOriginalExtension();
                    $filesize = $file->getSize();
                    $input['songs'] = time() .uniqid().'.' . $file->getClientOriginalExtension();
                    $file->move(public_path() . '/images', $input['songs']);  // your file path
                    $datas[$key] = $name;
                    $datas[$key] = $extension;
                    $datas[$key] = $filesize;
            
                    $file = new MusicUpload();
                    foreach ($datas as $data) {
                        $file->user_id = Auth::user()->id;
                        $file->filename = $name;
                        $file->extension = $extension;
                        $file->filesize = $filesize;
                        $file->save();
                    }
                }
            }
            $arr = array("status" => 200, "message" => "success", "data" => $output);
        } catch (\Exception $ex) {
            if (isset($ex->errorInfo[2])) {
                $msg = $ex->errorInfo[2];
            } else {
                $msg = $ex->getMessage();
            }
            $arr = array("status" => 400, "message" => $msg, "data" => array());
        }
    }
    return \Response::json($arr);
}

推荐阅读