更新:使用此 PR 中的代码修复了它,我已要求协助合并 PR,但目前我的问题已通过叉子进行排序。
尝试通过以下包上传到Google云存储:
https://github.com/Superbalist/flysystem-google-cloud-storage#usage
我的集成可以很好地使用细粒度访问控制,但我需要使用统一访问,并且任何时候我将其设置为统一而不是细粒度,我都无法再上传到存储桶,并收到以下错误:
{
"error": {
"code": 400,
"message": "Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access.",
"errors": [
{
"message": "Cannot insert legacy ACL for an object when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access.",
"domain": "global",
"reason": "invalid"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
为了让这个工作正常进行,我可能会缺少什么想法?
我正在尝试用Laravel 5删除照片.
Storage::delete( asset('/uploads/slides/abcd.jpg'));
Run Code Online (Sandbox Code Playgroud)
它返回此错误:
FileNotFoundException in Filesystem.php line 428:
File not found at path: http:/localhost:8000/uploads/slides/abcd.jpg
Run Code Online (Sandbox Code Playgroud)
如果我在浏览器中复制并粘贴路径,它会打开文件,因此该文件确实存在.怎么了?
我正在开发一个允许我的用户上传文件的应用程序,并且我已经使用文件系统功能使其与"本地"磁盘一起工作,但现在我想迁移并使用Google Google云端存储.
找到一些有用的信息非常困难.在文档中有一个与dropbox一起工作的"示例",但它并不完整.它没有显示如何配置驱动程序和磁盘,因此对我来说还不够清楚.
我想知道该怎么做,因为我现在不知道.
我刚刚使用了这个教程http://www.codetutorial.io/laravel-5-file-upload-storage-download/,它正在为本地工作,所以我真的需要迁移到谷歌云存储,只有那个.我正在使用openshift,我觉得很舒服.
你能不能请我知道我应该配置哪些文件系统可以根据需要使用?
谢谢
php google-cloud-storage laravel-5 flysystem laravel-filesystem
我尝试将Laravel Flysystem与 PHP League (league/flysystem-sftp) 的 sftp 适配器一起使用。使用 Laravel 5.4 和 Flysystem 3.7 版本。
当我尝试将文件放在服务器上时,我收到消息:
无法连接到 someadress.com:22。错误 13. 权限被拒绝
这是代码:
$box = new Filesystem(new SftpAdapter(Config::get('flysystem.connections.sftp')));
$box->put('test.txt', 'bar');
Run Code Online (Sandbox Code Playgroud)
以及配置中的连接详细信息:
'sftp' => [
'driver' => 'sftp',
'host' => 'someadress.com',
'port' => 22,
'username' => 'someuser',
'password' => 'ArndomPa55',
'privateKey' => '/home/user/.ssh/id_rsa',
'root' => '/var/www/html/site/box/',
'timeout' => 20,
],
Run Code Online (Sandbox Code Playgroud)
当我从运行该程序的服务器建立 SSH 连接时,它连接正常,没有密码提示,因此它使用私钥。所以不确定为什么这不起作用。
我检查了接收服务器上的安全日志,里面什么也没有。
我尝试运行 Flysystem 的适配器基本示例代码Local,但出现Class 'League\Flysystem\Adapter\Local' not found错误。这是我的过程:
版本检查:
php -v
PHP 5.5.9-1ubuntu4.23 (cli) (built: Feb 8 2018 21:59:47)
Run Code Online (Sandbox Code Playgroud)
安装飞行系统:
composer require league/flysystem
Run Code Online (Sandbox Code Playgroud)
输出显示我是最新的(这是我第二次运行它):
Using version ^1.0 for league/flysystem
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
Run Code Online (Sandbox Code Playgroud)
现在网络根目录中有一个vendor文件夹。其中./web/vendor/league/flysystem/src/Adapter$有这些文件:
AbstractAdapter.php
AbstractFtpAdapter.php
CanOverwriteFiles.php
Ftpd.php
Ftp.php
Local.php
NullAdapter.php
Polyfill/
SynologyFtp.php
Run Code Online (Sandbox Code Playgroud)
...只是表明它似乎安装正确(?)我在我的 Web 根目录中创建一个测试文件和一个测试目录:
fly-local.php我将他们的文档中的文本粘贴到其中( https://flysystem.thephpleague.com/docs/adapter/local/):
<?php
use League\Flysystem\Filesystem;
use …Run Code Online (Sandbox Code Playgroud) 我在这个问题上挣扎了一段时间。我正在使用 sftp 适配器连接到另一台我经常读/写文件的服务器。
对于缩略图创建,我使用 Laravel Horizon 的后台作业从远程 sftp 服务器检索 pdf 内容,然后生成 jpg 并放置在本地文件系统中。
对于第一次设置,我需要制作大约 150k 的缩略图。当我在 Horizon 中使用大量进程时,远程服务器无法处理这么多的连接。
我目前必须限制最多 2 个进程(10 秒~ * 150k~),这不是最佳选择。
我想缓存连接,因为我知道这是可能的,并且可能解决我的问题,但无法让它工作:(
我能找到的唯一参考/教程/示例/文档是
https://medium.com/@poweredlocal/caching-s3-metadata-requests-in-laravel-bb2b651f18f3 https://flysystem.thephpleague.com/docs/advanced/caching/
当我使用示例中的代码时,如下所示:
Storage::extend('sftp-cached', function ($app, $config) {
$adapter = $app['filesystem']->createSftpAdapter($config);
$store = new Memory();
return new Filesystem(new CachedAdapter($adapter->getDriver()->getAdapter(), $store));
});
Run Code Online (Sandbox Code Playgroud)
我收到错误:不支持驱动程序 []。
这里有人可以在这方面进一步帮助我吗?
只是一个简单的问题。
尝试下载存储文件,但无法从存储文件夹下载文件。
在谷歌上搜索过。找到了两种下载存储文件的方法。两者都尝试过但没有成功。
return response()->download(storage_path("app\public\uploads\1662531990_Dropshipping.docx"));
Run Code Online (Sandbox Code Playgroud)
return Storage::disk('public')->download("app\public\uploads\1662531990_Dropshipping.docx", "1662531990_Dropshipping");
Run Code Online (Sandbox Code Playgroud)
是的,上面给出的文件存在于给定路径中。下面是该目录和错误屏幕的屏幕截图。
我认为,它与以下相关的软件包有关flysystem,因为composer show
league/config v1.1.1 Define configuration arrays with strict schemas an...
league/flysystem 3.2.1 File storage abstraction for PHP
league/flysystem-aws-s3-v3 3.0.0 AWS S3 filesystem adapter for Flysystem.
league/mime-type-detection 1.11.0 Mime-type detection for Flysystem
Run Code Online (Sandbox Code Playgroud)
在Windows IIS上升级到PHP 7.0.5(最后因为sqlsrv PDO驱动程序可用).我正在使用Laravel 5.1,当我尝试连接到FTP驱动器时,我从https://github.com/thephpleague/flysystem/blob/master/src/Adapter/Ftp.php#L19收到以下错误.
Use of undefined constant FTP_BINARY - assumed 'FTP_BINARY'
这是转移的PHP常量,所以不应该有问题,并且文档中没有任何内容可以说它已被弃用或任何东西.FTP_ASCII是一样的.我唯一做的就是改变PHP版本+ SQL驱动程序.
我一直在尝试配置 CDN (S3) 以与 LiipImagineBundle 配合使用,但当它请求不存在的服务时,我总是陷入困境。
这是什么意思?
filesystem_service 属性的值必须是返回 League\Flysystem\Filesystem 实例的服务。
从这里:http ://symfony.com/doc/current/bundles/LiipImagineBundle/cache-resolver/flysystem.html
在这里:http ://symfony.com/doc/current/bundles/LiipImagineBundle/data-loader/flysystem.html
我尝试创建一个返回 League\Flysystem\Filesystem 实例的服务,如下所示:
league.flysystem.s3adaptor:
class: League\Flysystem\AwsS3v3\AwsS3Adapter
arguments: ['@acme.s3_client', '%amazon.s3.bucket%', 's3_fs', '@?']
league.flysystem.filesystem:
class: League\Flysystem\Filesystem
arguments: ['@league.flysystem.s3adaptor', '@?']
calls:
- [addPlugin, ['@oneup_flysystem.plugin.list_with']]
Run Code Online (Sandbox Code Playgroud)
我不确定这是否正确,但我无法让它工作。
任何帮助或建议将不胜感激。
我已经设置了一个 S3 存储桶并创建了一个具有完全 S3 访问权限的 IAM 用户,并运行了composer require league/flysystem-aws-s3-v3.
我还在 .env 中配置了以下内容:
AWS_ACCESS_KEY_ID=XXXX
AWS_SECRET_ACCESS_KEY=YYYY
AWS_DEFAULT_REGION=us-west-3
AWS_BUCKET=my-bucket
AWS_USE_PATH_STYLE_ENDPOINT=false
FILESYSTEM_DRIVER=s3
Run Code Online (Sandbox Code Playgroud)
问题是我根本无法从我的控制器与 S3 交互。我尝试过将文件发送到 S3:
$path = $request->Image->store('images', 's3');
Run Code Online (Sandbox Code Playgroud)
我还手动将图像上传到 S3,然后尝试检查是否可以找到它:
if (Storage::disk('s3')->exists('photo.jpg')) {
dd("file found");
} else{
dd("file not found");
}
Run Code Online (Sandbox Code Playgroud)
这会导致此错误:Unable to check existence for: photo.jpg
这让我认为问题出在flysystem-aws-s3-v3.
有没有办法缩小问题所在的范围?顺便说一句,我正在使用Laravel 9和Flysystem-aws-s3-v3 3.0(如果有帮助的话)。