标签: flysystem

如何在laravel 5中使用Storage facade获取文件路径?

我一直在尝试使用与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)

但路径,或任何能够检索完整路径的东西都不可用(据我所见).那我怎么能回到完整的路径呢?或者,我想知道这是否是设计的?如果是这样,为什么我不应该能够获得完整的路径?或者,我是否完全以错误的方式解决这个问题?

php laravel-5 flysystem

68
推荐指数
6
解决办法
16万
查看次数

使用Laravel 5.0 Storage Facade将元数据,标题(Expires,CacheControl)添加到上传到Amazon S3的文件中

我试图找出如何将元数据或标题(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)

任何有关如何实现这一点的帮助将不胜感激.

php amazon-s3 laravel-5 flysystem

22
推荐指数
3
解决办法
8917
查看次数

如何利用StorageFacade利用Filesystem类的glob方法?

这与Laravel 5有关.

我可以在Illuminate\Filesystem\Filesystem一个叫做的方法中看到glob($pattern, $flags = 0)

不幸的是,这种方法没有反映在FilesystemAdapterLaravel 5附带的默认值中.

这将是很好的,因为我需要做一些事情Storage::disk('local')->glob([_]*[.blade.php]);(为了让所有存储的刀片文件以下划线开头.

实现这一目标的最简洁方法是什么?

php dependency-injection laravel laravel-5 flysystem

18
推荐指数
1
解决办法
1785
查看次数

当文件的type属性为"audio/mpeg"时,为什么Laravel的getMimeType()方法将文件识别为"application/octet-stream"?

我正在尝试将一个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)

php laravel flysystem

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

如何使用资源逐行编写,但仍使用Laravel的内置存储?

我想用来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

php laravel flysystem laravel-5.3

9
推荐指数
1
解决办法
1337
查看次数

Laravel 5 Flysystem - 从远程磁盘下载文件

我使用Flysystem在Rackspace上存储站点的文件.上传没有问题,无法弄清楚如何开始下载文件 - 这就是我尝试过的

Storage::disk('rackspace');
return response()->download('file-library/' . $file->filename);
Run Code Online (Sandbox Code Playgroud)

结果是找不到该文件.是否Storage::disk()足以让Laravel看到这个位置而不是本地?完成此任务的最佳方法是什么?

php laravel laravel-5 flysystem

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

League/Flysystem fstat()期望参数1是资源,给定对象

我正在将项目从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",

可能导致这种情况的任何想法?

php laravel laravel-5 flysystem intervention

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

Laravel的文件系统,s3使用了错误的URL

我正在使用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)

amazon-s3 laravel laravel-5 flysystem

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

使用Laravel从Web服务器流式传输Amazon S3对象

在我使用laravel 5.1构建的web应用程序中,用户可以上传我存储在Amazon S3中的一些敏感文件.后来我希望用户WITH PERMISSION下载此文件.由于我希望进行此身份验证检查,因此我无法使用传统方法下载该文件,只需在S3中直接链接到文件即可.

我的方法:

  1. 当用户请求下载时,我的服务器在本地下载文件,然后流式传输给用户.问题:需要很长时间,因为文件有时太大.

  2. 为用户提供预先签名的URL,以便直接从S3下载.URL仅在5分钟内有效.问题:如果共享该URL,则任何人都可以在5分钟内下载该URL.

  3. 根据这篇文章,将数据直接从S3流式传输到客户端.这看起来很有希望,但我不知道如何实现这一点.

根据这篇文章,我需要:

  1. 注册流包装器 -这是我的第一个问题,因为我不知道如何获取S3Client对象,因为laravel使用flysystem,我不知道调用什么方法来获取这个对象.也许我需要在我的composer.json中单独包含S3包?
  2. 禁用输出缓冲 -我是否需要在laravel中执行此操作或laravel已经处理过它?

我相信其他开发人员之前已经看过这样的问题,并希望得到一些帮助指针.如果有人已经使用laravel直接从S3流向客户端Response::download($pathToFile, $name, $headers),那么我很想听听你的方法.

amazon-s3 laravel laravel-5 flysystem

6
推荐指数
1
解决办法
2815
查看次数

尝试使用 Superbalist/flysystem-google-cloud-storage 上传到 Google 云存储

更新:使用此 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)

为了让这个工作正常进行,我可能会缺少什么想法?

php storage google-cloud-storage flysystem

6
推荐指数
1
解决办法
5182
查看次数