首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在公用文件夹中以原始名称保存文件

如何在公用文件夹中以原始名称保存文件
EN

Stack Overflow用户
提问于 2019-06-24 19:37:55
回答 2查看 218关注 0票数 0

我尝试将文件从默认位置保存到新位置(在public/ files中),并希望以其原始名称保存它们,我更新了代码,但代码不起作用:

我从前一个更新的代码:

代码语言:javascript
复制
    public function store(Request $request)
    {
    request()->validate([
        'filename' => 'required',
    ]);
    $files = $request->hasfile('filename');
    $files->move(public_path('files'), $new_name);
    foreach($request->file('filename') as $file) {
            File::create([
                'filename' => $file->getClientOriginalExtension(),
        ]);
    }

    return redirect('/file')->with('success', 'File Uploaded Successfully');
 }

我的原始/当前工作代码:

代码语言:javascript
复制
  public function store(Request $request)
  {
    request()->validate([
        'filename' => 'required',
    ]);
    $files = $request->file('filename');
    foreach ($files as $file) {
            File::create([
                'filename' => $file->getClientOriginalExtension(),
        ]);
    }

    return redirect('/file')->with('success', 'File Uploaded Successfully');
}

我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-24 20:12:32

已更新

问题1:使用已被Larave1采用的关键字,如文件

Solution:重命名模型文件以及迁移示例:-

模型文件:UploadedFile.php

代码语言:javascript
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UploadedFile extends Model
{
    protected $fillable = [
        'filename',
        'path'
    ];
    protected $table = 'uploadedFiles';
}

迁移文件:2019_06_24_072153_create_uploaded_files_table.php

代码语言:javascript
复制
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUploadedFilesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('uploadedFiles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('filename');
            $table->string('path');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('uploadedFiles');
    }
}

问题2:在公共文件夹中没有创建符号链接(强烈建议将文件存储在存储文件夹中,而不仅仅是公共文件夹)

Solution:删除已创建为存储的文件夹并运行此命令

代码语言:javascript
复制
php artisan storage:link

现在在FileController中,这是如何将多个图像存储到存储文件夹和数据库中:

代码语言:javascript
复制
public function store(Request $request) 
{ 
    request()->validate([
    'filename' => 'required',
    ]);
    if($request->hasFile('filename')){
        $files = $request->file('filename');
        foreach($files as $file){
            $filename = $file->getClientOriginalName();
            Storage::disk('public')->put('files/'.$filename, File::get($file));
            UploadedFile::create([
                'filename' => $filename,
                'path'     => url('storage/files/'.$filename)
            ]);
        }
    }
    return redirect('/file')->with('success', 'File Uploaded Successfully');
} 

在刀片文件中简单调用路径,因为我们已经将路径保存到数据库中

代码语言:javascript
复制
<img class="card-img-top" src="{{ $file->path }}">

在进行所有更改后,运行以下命令

代码语言:javascript
复制
composer update
php artisan config:cache
composer dumpa
php artisan migrate:refresh --seed

如果您使用的是Ubuntu,则还需要授予权限

代码语言:javascript
复制
sudo chmod -R a+rwx  /opt/lampp/htdocs/multifiles2/
chmod 777 /opt/lampp/htdocs/multifiles2/storage/logs/laravel-2019-06-24.log //In case if log file is not accessible 
票数 0
EN

Stack Overflow用户

发布于 2019-06-24 20:19:08

基本上,你需要做的是:

  1. 将Laravel配置为使用“”文件夹来存储您的文件。为此,您可以编辑config/filesystems.php并将以下代码添加到disks阵列中:

代码语言:javascript
复制
        'disks' => [
            // This is the block to add
            'my-disk' => [
                'driver' => 'local',
                'root' => public_path(), // Here we tell, that we want to save to the **public** folder
                'url' => env('APP_URL'),
                'visibility' => 'public',
            ],
            // Block end

            'local' => [
                'driver' => 'local',
                'root' => storage_path('app'),
            ],

            'public' => [
                'driver' => 'local',
                'root' => storage_path('app/public'),
                'url' => env('APP_URL') . '/storage',
                'visibility' => 'public',
            ],

            's3' => [
                'driver' => 's3',
                'key' => env('AWS_ACCESS_KEY_ID'),
                'secret' => env('AWS_SECRET_ACCESS_KEY'),
                'region' => env('AWS_DEFAULT_REGION'),
                'bucket' => env('AWS_BUCKET'),
                'url' => env('AWS_URL'),
            ],

        ],

  1. 将文件保存到此新磁盘:

代码语言:javascript
复制
if ($request->hasFile('filename')) {
    $file = $request->file('filename');
    $path = Storage::disk('my-disk')->putFileAs('files', $file, $file->getClientOriginalName()); // Here the first argument for putFileAs is the subfolder to save to
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56735734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档