是否可以使用Spatie Media Library(v7)转换图像后删除原始文件 - 例如,客户端上传巨大的分辨率文件,但我们只需要它们大约1000px宽,并且不想存储巨大的原始文件。
提前干杯!
我尝试通过 laravel 安装程序使用laravel new <appname>
.
这工作没有问题。一旦我尝试安装,spatie/medialibrary
就会出现以下无法解释的错误:
$ composer require "spatie/laravel-medialibrary:^9.0.0"
./composer.json has been updated
Running composer update spatie/laravel-medialibrary
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- spatie/laravel-medialibrary[9.0.0, ..., 9.6.4] require spatie/image ^1.4.0 -> satisfiable by spatie/image[1.4.0, ..., v1.x-dev].
- spatie/image[1.10.0, ..., v1.x-dev] require league/glide ^1.6 -> satisfiable by league/glide[1.6.0, 1.6.1, 1.7.0, 1.x-dev].
- spatie/image[1.7.5, ..., 1.9.0] require league/glide ^1.4 -> satisfiable …
Run Code Online (Sandbox Code Playgroud) 我在显示使用 spatie 媒体库上传的图像时遇到问题。我已经查看了他们的文档,但找不到解决方案。
我上传文件没有问题(仅限单个文件)。
控制器@商店
public function store(Request $request)
{
$categories = new ProductCategories();
$categories->name = $request->name;
$categories->slug = $request->slug;
$categories->description = $request->description;
if($request->hasFile('photo') && $request->file('photo')->isValid()){
$categories->addMediaFromRequest('photo')->toMediaCollection('category');
}
$categories->save();
$request->session()->flash('message', 'Successfully created category');
return redirect()->back();
}
Run Code Online (Sandbox Code Playgroud)
控制器@索引
public function index()
{
$lists = ProductCategories::all();
return view('dashboard\product_category\categoryList', [ 'lists' => $lists ]);
}
Run Code Online (Sandbox Code Playgroud)
config/filesystems.php
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => public_path('images/media'),
'url' => env('APP_URL').'/images/media',
'visibility' …
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用 laravel spatie。我有个问题。当用户更新他的图像列表时。管理员必须批准用户刚刚更新的图像列表。如果用户添加图像,我只需添加更多。但是当用户改变自己拥有的图像时,该怎么办呢?我无法更改 collection_name,因为如果我更改,该图像不会出现在用户个人资料中。你对我有什么理想吗?我有一个理想:我在 custom_properties 列中添加一个 value {'change' => 'false'}
。当用户更改此图像时,我会将 custom_properties 更改为{'change' => 'true'}
. 当管理员批准更改时,我必须将 custom_properties 更新为{'change' => 'false'}
. 但我无法访问 custom_properties 列的值。(如您所知,laravel spatie 为我们提供了一个媒体表,它有一个列 custom_properties,其中包含 json 数据)。所以请帮助我访问此专栏并更新其中的数据。
很抱歉,因为我的英语不好。
$mediaOld = Media::where(['model_id' => $doctor_id, 'collection_name' => 'doctor_achieved'])->get();
if (isset($mediaOld[$index])) {
$mediaOld[$index]->update(['custom_properties->change' => 'true']);
$mediaOld[$index]->save(); // Its not working
return $mediaOld[$index]->custom_properties;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用包spatie/laravel-medialibrary,我想更改其名为 Media 的模式上的 PrimaryKey,而不编辑包 src 文件。
在我的项目中,我使用 uuid 作为所有模型的主键,因此自然地,我想对此包提供的 Media.php 模型执行相同的操作。
我已经更改了迁移以反映这一点,通过删除该行$table->bigInteger('id')
并将其更改$table->uuid('uuid')->nullable();
为table->uuid('uuid')->unique()->primary();
但是,现在我还想让模型知道我正在使用不同的密钥,通过设置protected $primaryKey = 'uuid';
,protected $keyType = 'string';
但我找不到在 Media.php 模型的包 src 文件之外执行此操作的方法
基本上,我最终想要做的只是实现 HasMedia 接口并在我的 Profile 模型上使用 InteractsWithMedia 特征,如下所示:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class Profile extends Model implements HasMedia
{
use InteractsWithMedia;
}
Run Code Online (Sandbox Code Playgroud)
关于如何实现这一目标有什么建议吗?
谢谢。
我对这个包很陌生,因为我通常使用图像干预。所以问题是每当我保存图像时,它都会保存在存储目录中而不是公共目录中。我尝试查看文档并做了一些研究,但没有看到任何答案。请参阅下面我的代码进行保存。
$user->addMediaFromRequest('avatar')->toMediaCollection('avatars');
Run Code Online (Sandbox Code Playgroud)
包裹: