我正在使用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
这是预期的吗?有没有办法只为每个文件存储没有单独目录的文件?
谢谢!
我已经在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
我在使用 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 页面,因为我猜没有文件。
我已经查看了关于这个的其他帖子,我的某些原因似乎是独一无二的
基本上我要做的是将上传的照片存储在公共目录中以便于访问,但是当我存储它们时,我试图将它们存储在用户特定的文件夹中,所以
/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)
不知道这个时期的来源,并且非常感谢任何帮助
谢谢大家!
我正在尝试通过以下方式检查文件是否已存在于存储中
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) 我的本地存储中有文件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 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()不浪费吗?还有更好的解决方案吗?
我正在开发一个允许我的用户上传文件的应用程序,并且我已经使用文件系统功能使其与"本地"磁盘一起工作,但现在我想迁移并使用Google Google云端存储.
找到一些有用的信息非常困难.在文档中有一个与dropbox一起工作的"示例",但它并不完整.它没有显示如何配置驱动程序和磁盘,因此对我来说还不够清楚.
我想知道该怎么做,因为我现在不知道.
我刚刚使用了这个教程http://www.codetutorial.io/laravel-5-file-upload-storage-download/,它正在为本地工作,所以我真的需要迁移到谷歌云存储,只有那个.我正在使用openshift,我觉得很舒服.
你能不能请我知道我应该配置哪些文件系统可以根据需要使用?
谢谢
php google-cloud-storage laravel-5 flysystem laravel-filesystem
如何使用Laravel的filesytem(文件存储)方法存储base64图像?
例如,我可以像这样解码base64图像:
base64_decode($encoded_image);
Run Code Online (Sandbox Code Playgroud)
但是Laravel的所有文件存储方法都可以接受Illuminate\Http\File或Illuminate\Http\UploadedFile实例。
所以我想我必须将base64图像(或解码的base64图像)转换为Illuminate\Http\File或Illuminate\Http\UploadedFile,但是如何?
我的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 存储桶。
谢谢
laravel ×7
laravel-5 ×6
php ×5
amazon-s3 ×2
laravel-5.3 ×2
atomic ×1
base64 ×1
flysystem ×1
intervention ×1
laravel-5.4 ×1
laravel-5.6 ×1
upload ×1