【问题标题】:Image dose not move at folder path图像不会在文件夹路径中移动
【发布时间】:2018-06-15 18:36:47
【问题描述】:

我已经将777 permission 分配给了我的images 文件夹。 Charts Table 也在保存所有图像记录。我将在此处附加 table:charts 结构。

public function store(Request $request)
{
        $input = $request->all();
        $tradeID= Auth::user()->trade()->create($input);

    if($file = $request->file('file'))
    {
        $name = time() . $file->getClientOriginalName();
        $file->move('images', $name);
        $photo = Chart::create(['file'=>$name]);
        $input['photo_id'] = $photo->id;
    }
        $tradeID->chart()->create($input);
}

【问题讨论】:

    标签: php laravel laravel-5.2 laravel-5.1 laravel-5.3


    【解决方案1】:

    尝试将目标路径从相对路径更改为绝对路径

    public function store(Request $request)
    {
        $input = $request->all();
        $tradeID= Auth::user()->trade()->create($input);
    
        if($file = $request->file('file'))
        {
            $name = time() . $file->getClientOriginalName();
            $file->move( public_path() . '/images/', $name);  // absolute destination path
            $photo = Chart::create(['file'=>$name]);
            $input['photo_id'] = $photo->id;
        }
            $tradeID->chart()->create($input);
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

      if($file = $request->file('file'))
      {
          $name = time() . $file->getClientOriginalName();
          $path = $file->storeAs('images', $name,'public');
          $photo = Chart::create(['file'=>$name]);
          $input['photo_id'] = $photo->id;
      }
      

      您可以使用 /storage/public/file_name/file_name 检索文件,具体取决于您告诉 laravel 存储公共文件的位置

      【讨论】:

      • 此代码也无法将文件存储在images 文件夹中
      • 问题到底出在哪里?,在路径还是文件没有被添加?
      【解决方案3】:

      您实际上并没有存储文件,您实际上是在移动一个不存在的文件。

      您可能会考虑的事项 您很可能想从公共路径访问上传的文件。如果是这样,您应该将此文件存储到存储目录中的特定文件夹中,并在您的公共路径中创建指向该目录的符号链接。 这是一个例子:

      Storage::disks('public')->put($filename, $uploadedFile); // filename = 'images/imageFile.jpg'
      

      这会在您的 storage/app/public/images 目录中创建一个文件。

      然后,你可以创建一个符号链接,laravel 提供了一个简单的命令来做到这一点。

      php artisan storage:link
      

      这会创建一个指向您的公共磁盘的符号链接。

      然后,您可以通过http://your-site-server/storage/images/imageFile.jpg访问图片

      希望对你有帮助。

      【讨论】:

      • 我无法理解,因为我尝试上传图片,但是在images 文件夹中没有任何结果。
      • 看到您正在使用移动功能...当文件被加载时,它位于某个临时目录中,您实际上并没有复制该上传的文件。你试过我解释的吗?
      【解决方案4】:
       $name = time().'.'. $file->getClientOriginalName(); //depends on ur requirement
              $file->move(public_path('images'), $name);
      

      【讨论】:

        【解决方案5】:

        您是要移动上传的文件还是现有文件?

        要移动文件你需要做的:

        File::move($oldPath, $newPath);
        

        旧路径和新路径应包括完整路径和文件名(和扩展名)

        要存储上传的文件,您需要执行以下操作:

        Storage::disk('diskname')->put($newPath, File::get($file));
        

        新路径是带有文件名(和扩展名)的完整路径。

        • 磁盘是可选的,你可以用Storage::put()..直接存储文件。
        • 磁盘位于config/filesystems.php

        File::get($file)$file 是你从 post request $file = $request->file('file') 输入的,基本上是获取上传文件的内容。

        UPD#1

        好的,你可以这样做:

        $request->file('file')->store(public_path('images'));
        

        或者使用存储类:

            // get uploaded file
            $file = $request->file('file');
            // returns the original file name.
            $original = $file->getClientOriginalName();
            // get filename with extension like demo.php
            $filename = pathinfo($original)['basename'];
            // get public path to images folder
            $path = public_path('images');
            // concat public path with filename
            $filePath = $path.'/'.$filename;
            // store uploaded file to path
            $store = Storage::put($filePath, File::get($file));
        

        【讨论】:

        • 我在公共路径中的文件夹名称为images。我想把上传的图片移到这个文件夹中。
        • @KinnariPrajapati 请参阅 UPD#1
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 2021-06-21
        • 2021-02-05
        • 2012-04-29
        • 1970-01-01
        相关资源
        最近更新 更多