如何在laravel 5.4中为数据库中的现有用户上传文件并为其创建文件夹

时间:2018-12-29 09:41:55

标签: mysql laravel

我正在开发一个文档归档系统,我希望用户能够将文件上传到应链接到数据库中现有用户的特定文件夹。我该怎么办?

这是针对运行PHP 7.0.3以及Laravel 5.4的xampp服务器。我可以上传文件,但没有所有者。

没有可显示的代码。

我希望能够根据用户名搜索用户并检索其文件

2 个答案:

答案 0 :(得分:0)

文件上传不应由文件夹处理。上载文件时,请为其指定一个唯一的名称。例如,将此名称保存在数据库文件中,在该文件中您具有列user_id和file_name。然后,当您要获取特定用户的所有文件时,只需向数据库发送查询即可。 Laravel已经完成了大部分工作,看起来像这样:

$uploadedImage = $request->image->store('images');

这将返回如下内容:

"images/7UmX8yrOs2NYhpadt4Eacq4TFtpPGUCw6VTRJhfn.img"

然后您执行以下操作:

$image = new Image();
$image->user_id = $user_id;
$image->path = $uploadedImage();
$image->save();

如果您想自己给图像命名,则可以使用storeAs代替store这样的方法:

$uploadedImage = $request->image->storeAs('images', $filename);

答案 1 :(得分:0)

您可能要为此使用一对多关系。

首先创建一个文档模型并使用以下命令进行迁移。

php artisan make:model Document -m // -m option for migration file

为一对多关系配置用户和文档模型

用户模型

public function documents()
{
    return $this->hasMany('App\Document');
}

文档模型

public function user()
{
    return $this->belongsTo('App\User');
}

create_documents_table迁移

编辑迁移文件并添加name, path,type等。..

public function up()
    {
        Schema::create('documents', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string("name");
            $table->string("path");
            $table->string("type");

            $table->unsignedInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

然后运行php artisan:migrate命令。

完成!因此,让我们上传文件。

public function upload(Request $request){

   // get file from request
   $file = $request->file("document");

   // get username for file path (if user directory doesn't exist, Storage gonna create it)
   $username = $request->user()->username;

   // make file name unique
   $file_name = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
   $realName = str_slug($file_name); // it makes seo frendly
   $extension = $file->getClientOriginalExtension();
   $newFileName = $username."/".$realName . "-" . time() . "." . $extension;

   // store document on db (make sure these columns fillable on model or it throws error)
   $request->user()->documents()->create([
        "name"=>$file_name
        "path"=>$newFileName 
        "type"=>"document"
      ]); 
   // move uploaded file
   Storage::disk("locale")->put($newFileName,file_get_contents($file));

}

进一步,我强烈建议您阅读documents.,它使您了解关系查询的雄辩处理方式