标签: laravel-filesystem

Laravel 5.3 Storage :: put创建一个带有文件名的目录

我正在使用Laravel的文件存储功能来保存文件:

public function dataPost(Request $request) {

    $fileInForm = 'doc';

    if ($request->hasFile($fileInForm)) {

        $file = $request->file($fileInForm);
        if ($file->isValid()) {

            // Filename is hashed filename + part of timestamp
            $hashedName = hash_file('md5', $file->path());
            $timestamp = microtime() * 1000000;

            $newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension();

            Storage::disk('local')->put($newFilename, $file);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以保存文件,但是在与文件名称相同的目录中,例如:

storage/app/952d6c009.jpg/952d6c009.jpg

要么

storage/app/234234234.jpg/234234234.jpg

这是预期的吗?有没有办法只为每个文件存储没有单独目录的文件?

谢谢!

php laravel laravel-5 laravel-filesystem laravel-5.3

17
推荐指数
3
解决办法
2万
查看次数

Laravel 5干预中的图像验证

我已经在Laravel 5.1中安装了干预,我正在使用图片上传并调整大小如下:

Route::post('/upload', function()
{
Image::make(Input::file('photo'))->resize(300, 200)->save('foo.jpg');
});
Run Code Online (Sandbox Code Playgroud)

我不明白的是,干预如何处理上传图像的验证?我的意思是,干预是否已经在其中进行了内置图像验证检查,或者是我需要使用Laravel手动添加Validation来检查文件格式,文件大小等的东西.?我已阅读干预文档,但在使用laravel干预时,我无法找到有关图像验证如何工作的信息.

有人能指出我正确的方向吗...

laravel laravel-5 laravel-validation intervention laravel-filesystem

12
推荐指数
2
解决办法
4万
查看次数

Laravel 符号链接不起作用

我在使用 Laravel 创建符号链接来访问存储中的文件时遇到一些问题

我将我的文件存储在 storage\app\public

我使用 php artisan 命令来创建链接 php artisan storage: link The [public/storage] directory has been linked.

早期的文件存储在文件夹中并且在文件夹storage\app\public中也可见public\storage

但现在它们只存储在文件夹中并且在文件夹storage\app\public中不可见public\storage

我正在使用链接显示文件路径 {{ Storage::url($package->reportPath['path']) }} 路径显示正确,但它重定向到 404 页面,因为我猜没有文件。

laravel laravel-filesystem laravel-5.4

8
推荐指数
2
解决办法
8447
查看次数

Laravel无法创建根目录

我已经查看了关于这个的其他帖子,我的某些原因似乎是独一无二的

基本上我要做的是将上传的照片存储在公共目录中以便于访问,但是当我存储它们时,我试图将它们存储在用户特定的文件夹中,所以

/public/photos/$User->id/$filename.jpg
Run Code Online (Sandbox Code Playgroud)

现在我有Dropzone上传文件,我已经添加到我的filesystem.php这个语句

'public_uploads' => [
  'driver' => 'local',
  'root'   => public_path(),
],
Run Code Online (Sandbox Code Playgroud)

所以在理论上当我使用时访问它

Storage::disk('public_uploads') 
Run Code Online (Sandbox Code Playgroud)

它应该检索正确的路径

这也是我的控制器

$User = User::find(Auth::user()->id);
$Photo = Request::file('photo');
Storage::disk('public_uploads')->put("photos/$User->id", $Photo);
Run Code Online (Sandbox Code Playgroud)

然后我在上传时从Laravel收到此错误

{message: "Impossible to create the root directory "/censoredfilesystem/public/Photos/1".",…}
Run Code Online (Sandbox Code Playgroud)

不知道这个时期的来源,并且非常感谢任何帮助

谢谢大家!

  • 扎克

php laravel laravel-5 laravel-filesystem

7
推荐指数
1
解决办法
1万
查看次数

Laravel 检查存储是否存在不起作用

我正在尝试通过以下方式检查文件是否已存在于存储中

if(Storage::exists($request->file_name)):
    dd(var_dump("it did exist"));
else:
    dd(var_dump("it did not exist"));
endif
Run Code Online (Sandbox Code Playgroud)

但它总是返回一个字符串“它确实存在”,即使文件实际上被删除或文件不存在,任何想法,帮助?

我确定我的存储位置设置没有问题,因为我在将文件上传到存储时没有问题,

Storage::put($file_name, File::get($file));
Run Code Online (Sandbox Code Playgroud)

PS:我在 Laravel 5.0

更新:

这是我的 Laravel 5.0 配置文件夹中的 filesystems.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. A "local" driver, as well as a variety of cloud
    | based drivers are available for your choosing. Just store away!
    |
    | Supported: "local", "s3", "rackspace"
    | …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-5 laravel-filesystem

6
推荐指数
2
解决办法
9552
查看次数

如何在 laravel 5 中将文件从本地文件系统移动到云文件系统

我的本地存储中有文件public/images/users,我想AWS S3使用 Laravel 文件系统将这些文件移动到云存储。

Route::get('upload-local-files-to-s3', function() {
        $documentFiles = Storage::disk('public')->files('images\\users\\');
        foreach ($documentFiles as $documentFile){
        $filesystem  = new Filesystem();
        $contents = $filesystem->get($documentFile);
        Storage::disk('s3')->put('documents\\'. $documentFile, $contents)
        echo $documentFile . ' Uploaded. '. '<br>';
    }
});
Run Code Online (Sandbox Code Playgroud)

此代码将文件上传到,但当我想在文档文件夹中上传文件时,S3它会在其中创建新文件夹。 如何从上面的变量名创建文件对象? 因为我想使用文件对象中的以下函数。documents/images/users
$documentFile

getClientOriginalExtension()
getClientMimeType()
getFilename()
getClientOriginalName()
Run Code Online (Sandbox Code Playgroud)

laravel-filesystem laravel-5.3

6
推荐指数
0
解决办法
1031
查看次数

Laravel 5:如何将本地文件复制到Amazon S3?

我正在Laravel 5中编写代码来定期备份MySQL数据库.到目前为止我的代码看起来像这样:

    $filename = 'database_backup_'.date('G_a_m_d_y').'.sql';
    $destination = storage_path() . '/backups/';

    $database = \Config::get('database.connections.mysql.database');
    $username = \Config::get('database.connections.mysql.username');
    $password = \Config::get('database.connections.mysql.password');

    $sql = "mysqldump $database --password=$password --user=$username --single-transaction >$destination" . $filename;

    $result = exec($sql, $output); // TODO: check $result

    // Copy database dump to S3

    $disk = \Storage::disk('s3');

    // ????????????????????????????????
    //  What goes here?
    // ????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

我在网上看到的解决方案建议我做一些类似的事情:

$disk->put('my/bucket/' . $filename, file_get_contents($destination . $filename));
Run Code Online (Sandbox Code Playgroud)

但是,对于大文件,使用file_get_contents()不浪费吗?还有更好的解决方案吗?

upload amazon-s3 laravel laravel-5 laravel-filesystem

5
推荐指数
4
解决办法
8775
查看次数

如何使用谷歌云存储作为Laravel 5文件系统?

我正在开发一个允许我的用户上传文件的应用程序,并且我已经使用文件系统功能使其与"本地"磁盘一起工作,但现在我想迁移并使用Google Google云端存储.

找到一些有用的信息非常困难.在文档中有一个与dropbox一起工作的"示例",但它并不完整.它没有显示如何配置驱动程序和磁盘,因此对我来说还不够清楚.

我想知道该怎么做,因为我现在不知道.

我刚刚使用了这个教程http://www.codetutorial.io/laravel-5-file-upload-storage-download/,它正在为本地工作,所以我真的需要迁移到谷歌云存储,只有那个.我正在使用openshift,我觉得很舒服.

你能不能请我知道我应该配置哪些文件系统可以根据需要使用?

谢谢

php google-cloud-storage laravel-5 flysystem laravel-filesystem

5
推荐指数
1
解决办法
8817
查看次数

Laravel文件存储:如何存储(解码)base64图像?

如何使用Laravel的filesytem(文件存储)方法存储base64图像?

例如,我可以像这样解码base64图像:

base64_decode($encoded_image);
Run Code Online (Sandbox Code Playgroud)

但是Laravel的所有文件存储方法都可以接受Illuminate\Http\FileIlluminate\Http\UploadedFile实例。

所以我想我必须将base64图像(或解码的base64图像)转换为Illuminate\Http\FileIlluminate\Http\UploadedFile,但是如何?

php base64 laravel laravel-filesystem laravel-storage

5
推荐指数
2
解决办法
5962
查看次数

Laravel 将文件从一个磁盘移动到另一个磁盘 - 使用“存储”

我的filesystems.php配置文件中定义了两个磁盘:

'd1' => [
    'driver' => 'local',
    'root' => storage_path('app/d1'),
],
'd2' => [
   'driver' => 'local',
   'root' => storage_path('app/d2'),
],
Run Code Online (Sandbox Code Playgroud)

这些磁盘也可以是 Amazon S3 存储桶,并且可以是 S3 存储桶和本地磁盘的组合。

假设我有一个文件app/d1/myfile.txt想要移动到app/d2/myfile.txt.

我现在正在做的是

$f = 'myfile.txt';
$file = Storage::disk('d1')->get($f);
Storage::disk('d2')->put($f, $file);
Run Code Online (Sandbox Code Playgroud)

并将原始文件保留在 d1 上,因为它不会打扰我(我定期从 d1 中删除文件)。

我的问题是:

下面的代码是否是原子的,我如何检查它是否是原子的,如果不是,我如何使其成为原子的(对于文件大小为 1GB 或类似大小的情况):

$f = 'myfile.txt';
$file = Storage::disk('d1')->get($f);
Storage::disk('d2')->put($f, $file);
Storage::disk('d1')->delete($f);
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以使用Storage外观将文件从一个磁盘移动到另一个磁盘。目前,我需要它从一个本地磁盘工作到另一个本地磁盘,但将来我可能需要将它们从一个 S3 存储桶移动到同一个存储桶,从一个 S3 存储桶移动到另一个 S3 存储桶,或者从本地磁盘移动到 S3 存储桶。

谢谢

atomic amazon-s3 laravel-filesystem laravel-5.6

5
推荐指数
2
解决办法
1万
查看次数