我一直在尝试使用与Laravel 5的新Flysystem集成.我正在将"本地化"路径存储到数据库,并使存储外观完成路径.例如,我存储screenshots/1.jpg和使用
Storage::disk('local')->get('screenshots/1.jpg')
Run Code Online (Sandbox Code Playgroud)
要么
Storage::disk('s3')->get('screenshots/1.jpg')
Run Code Online (Sandbox Code Playgroud)
我可以在不同的磁盘上检索相同的文件.
get 检索文件内容,但我希望在我的视图中使用它,如下所示:
<img src="{{ Storage::path('screenshots/1.jpg') }}" />
Run Code Online (Sandbox Code Playgroud)
但路径,或任何能够检索完整路径的东西都不可用(据我所见).那我怎么能回到完整的路径呢?或者,我想知道这是否是设计的?如果是这样,为什么我不应该能够获得完整的路径?或者,我是否完全以错误的方式解决这个问题?
我试图找出如何将元数据或标题(Expires,CacheControl等)添加到使用Laravel 5.0存储外观上传的文件中.我在这里使用这个页面作为参考.
http://laravel.com/docs/5.0/filesystem
以下代码正常工作:
Storage::disk('s3')->put('/test.txt', 'test');
Run Code Online (Sandbox Code Playgroud)
在挖掘之后我还发现有一个'visibility'参数可以将ACL设置为'public-read',因此以下内容也可以正常工作.
Storage::disk('s3')->put('/test.txt', 'test', 'public');
Run Code Online (Sandbox Code Playgroud)
但我希望能够为文件的标题设置一些其他值.我尝试过以下方法:
Storage::disk('s3')->put('/index4.txt', 'test', 'public', array('Expires'=>'Expires, Fri, 30 Oct 1998 14:19:41 GMT'));
Run Code Online (Sandbox Code Playgroud)
哪个不起作用,我也尝试过:
Storage::disk('s3')->put('/index4.txt', 'test', array('ACL'=>'public-read'));
Run Code Online (Sandbox Code Playgroud)
但是这会产生一个错误,其中'visibility'参数无法从字符串转换为数组.我检查了AwsS3Adapter的来源,似乎有选项代码,但我似乎无法看到如何正确传递它们.我认为它需要以下内容:
protected static $metaOptions = [
'CacheControl',
'Expires',
'StorageClass',
'ServerSideEncryption',
'Metadata',
'ACL',
'ContentType',
'ContentDisposition',
'ContentLanguage',
'ContentEncoding',
];
Run Code Online (Sandbox Code Playgroud)
任何有关如何实现这一点的帮助将不胜感激.
这与Laravel 5有关.
我可以在Illuminate\Filesystem\Filesystem一个叫做的方法中看到glob($pattern, $flags = 0)
不幸的是,这种方法没有反映在FilesystemAdapterLaravel 5附带的默认值中.
这将是很好的,因为我需要做一些事情Storage::disk('local')->glob([_]*[.blade.php]);(为了让所有存储的刀片文件以下划线开头.
实现这一目标的最简洁方法是什么?
我正在尝试将一个MP3文件上传到Laravel应用程序并遇到一个问题,即使该文件的属性设置为"audio/mpeg",它也会上传为"application/octet-stream"(.bin)文件.当我尝试死亡并将文件转储到服务器端代码时:
dd($request->file('file'));
Run Code Online (Sandbox Code Playgroud)
我明白了:
UploadedFile {#187 ?
-test: false
-originalName: "CUS12309821-20-AUG-2016-13-48-13.mp3"
-mimeType: "audio/mpeg"
-size: 47000471
-error: 0
path: "/private/var/folders/c7/6ws0lxy95dd_lhz1k067_zkc0000gn/T"
filename: "phpyZCsbU"
basename: "phpyZCsbU"
pathname: "/private/var/folders/c7/6ws0lxy95dd_lhz1k067_zkc0000gn/T/phpyZCsbU"
extension: ""
realPath: "/private/var/folders/c7/6ws0lxy95dd_lhz1k067_zkc0000gn/T/phpyZCsbU"
aTime: 2016-09-20 12:56:00
mTime: 2016-09-20 12:56:00
cTime: 2016-09-20 12:56:00
inode: 4565593
size: 47000471
perms: 0100600
owner: 501
group: 20
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
}
Run Code Online (Sandbox Code Playgroud)
看看我何时使用这种方法,确实说mimeType的文件属性是正确的"audio/mpeg"格式.但是当我上传文件后调用getMimeType()方法时,我得到:
"application/octet-stream"
Run Code Online (Sandbox Code Playgroud)
这是路由方法中的代码:
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* …Run Code Online (Sandbox Code Playgroud) 我想用来Storage::put写一个文件.该文件可能非常大(> 100MB),所以我想利用一个流,所以我不会盲目地将所有内容放入内存中.
我将要发出多个API请求,然后循环遍历他们的结果,因此我将要回来的数据不是问题,它将限于合理的数量.
根据文档,我需要使用:
Storage::put('file.xml', $resource);
Run Code Online (Sandbox Code Playgroud)
但是这会$resource是什么?
传统上,当使用PHP编写文件时,我已经用它的组合来完成它fopen,fwrite并且fclose为了逐行编写.我正在创建的文件了通过各种集合循环和utlising各种API,因为我去,所以$resource是不是一个文件指针或文件引用作为在文档中关于其他地方交谈.
那么,我如何使用流和Laravel进行逐行编写Storage?
我使用Flysystem在Rackspace上存储站点的文件.上传没有问题,无法弄清楚如何开始下载文件 - 这就是我尝试过的
Storage::disk('rackspace');
return response()->download('file-library/' . $file->filename);
Run Code Online (Sandbox Code Playgroud)
结果是找不到该文件.是否Storage::disk()足以让Laravel看到这个位置而不是本地?完成此任务的最佳方法是什么?
我正在将项目从Laravel 5升级到5.1.需要更新的一个包是League\Flysystem.
我Intervention\Image用来调整图像大小,然后使用Flysystem将其保存到S3.下面的代码与5.0一起使用 -
// Album ID
$id = $request->input('id');
// Filename for this photo
$filename = str_random() . ".jpg";
// Get the storage disk
$disk = Storage::disk('s3');
// Resize the photo
$image = Image::make($request->file('photo'));
$image->orientate();
$image->resize(1024, 748, function ($constraint) {
$constraint->aspectRatio();
});
$image->encode('jpg');
// Save the photo to the disk
$disk->put("img/album/$id/$filename", $image);
Run Code Online (Sandbox Code Playgroud)
但现在我收到以下错误:
fstat() expects parameter 1 to be resource, object given,引入league\flysystem\src\Util.php第250行.
我在用"intervention/image": "~2.1","league/flysystem-aws-s3-v3" : "~1.0",
可能导致这种情况的任何想法?
我正在使用Laravel的文件系统在s3上存储项目,我得到了错误的URL.
Storage::disk('s3')->put('file.txt', 'Contents');
Run Code Online (Sandbox Code Playgroud)
给我错误
CurlException in CurlMulti.php line 359:
[curl] 6: Could not resolve host: mybucket.s3.website-us-east-1.amazonaws.com [url] https://mybucket.s3.website-us-east-1.amazonaws.com/file.txt
Run Code Online (Sandbox Code Playgroud)
这个URL
mybucket.s3.website-us-east-1.amazonaws.com
应该
mybucket.s3-website-us-east-1.amazonaws.com
配置/ filesystem.php
's3' => [
'driver' => 's3',
'key' => env('S3_KEY'),
'secret' => env('S3_SECRET'),
'region' => env('S3_REGION'),
'bucket' => env('S3_BUCKET'),
],
Run Code Online (Sandbox Code Playgroud)
.ENV
S3_KEY=MYKEY
S3_SECRET=mySecr3tmySecr3tmySecr3tmySecr3t
S3_REGION=website-us-east-1
S3_BUCKET=mybucket
Run Code Online (Sandbox Code Playgroud) 在我使用laravel 5.1构建的web应用程序中,用户可以上传我存储在Amazon S3中的一些敏感文件.后来我希望用户WITH PERMISSION下载此文件.由于我希望进行此身份验证检查,因此我无法使用传统方法下载该文件,只需在S3中直接链接到文件即可.
我的方法:
当用户请求下载时,我的服务器在本地下载文件,然后流式传输给用户.问题:需要很长时间,因为文件有时太大.
为用户提供预先签名的URL,以便直接从S3下载.URL仅在5分钟内有效.问题:如果共享该URL,则任何人都可以在5分钟内下载该URL.
根据这篇文章,将数据直接从S3流式传输到客户端.这看起来很有希望,但我不知道如何实现这一点.
根据这篇文章,我需要:
S3Client对象,因为laravel使用flysystem,我不知道调用什么方法来获取这个对象.也许我需要在我的composer.json中单独包含S3包?我相信其他开发人员之前已经看过这样的问题,并希望得到一些帮助指针.如果有人已经使用laravel直接从S3流向客户端Response::download($pathToFile, $name, $headers),那么我很想听听你的方法.
更新:使用此 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)
为了让这个工作正常进行,我可能会缺少什么想法?
flysystem ×10
php ×8
laravel ×7
laravel-5 ×7
amazon-s3 ×3
intervention ×1
laravel-5.3 ×1
storage ×1