amirsahra / illustrator
轻松管理图片的添加和更新
README
illustrator
简介
轻松管理图片的添加和更新
我在处理图像时最关心的问题一直是命名和确定存储位置。这就是我决定开发这个包的原因,这样任何像我一样厌倦了这种命名和选择保存图像目录的程序员都可以使用它,并将图像上传到所需的目录而无需额外工作。
它还具有更新目标图像的能力,这意味着删除目标图像并保存新图像非常简单。
安装后,您只需通过破坏其外观即可轻松使用illustrator。
// Upload the image with the default values set in the config file of this package Illustrator::upload($request->imageFieldName); // Upload the image to the desired directory Illustrator::setDir('images/users')->upload($request->imageFieldName); // Upload the image to the desired name Illustrator::setName('myDesiredName')->upload($request->imageFieldName); // Upload the image to the desired disk Illustrator::setDisk('public')->upload($request->imageFieldName); //You can use this method together, but the upload method must be at the end. Illustrator::setDisk('public') ->setName('myDesiredName') ->setDir('images/users') ->upload($request->imageFieldName);
更新图像也像上面一样简单,我们使用带有我们想要更新的图像完整目录参数的更新方法,而不是上传方法。
Illustrator::setDisk('public') ->setName('myDesiredName') ->setDir('images/users') ->update($request->imageFieldName,$imagePath);
磁盘
根据Laravel的功能,我们有两种存储磁盘类型:public
和local
。如果我们想通过URL访问图像(如用户图像、横幅等),其磁盘必须是public
,如果我们想安全下载的图像(如发票、交易列表等任何需要安全的图像),其磁盘必须是local
。
安装
- 您可以使用composer安装此包
composer require amirsahra/illustrator
- 将以下类添加到
config/app.php
中的提供者数组
Amirsahra\Illustrator\IllustratorServiceProvider::class,
- 您需要将配置文件添加到配置目录。发布配置文件
php artisan vendor:publish --tag="illustrator"
警告
如果此命令没有发布任何文件,那么很可能是Laratrust服务提供者尚未注册。尝试清除您的配置缓存。
php artisan config:clear
并且
composer dump-autoload
公共磁盘
根据Laravel的功能使用public
磁盘,您需要创建一个链接。
要创建符号链接,您可以使用storage:link Artisan命令
php artisan storage:link
用法
例如,您有一个名为MyImage的模型,其中包含以下字段
id, path, created_at, updated_at
在配置文件中,确定选项及其默认值。
让我们先从配置开始。您使用发布命令编辑位于配置目录中的配置文件,该配置文件以包名称命名(在安装部分中解释了该命令)。
这是默认值,如果需要的话,
您将很容易通过使用外观包访问它。只需在use类中使用它即可。
use Amirsahra\Illustrator\Facade\Illustrator; Illustrator::upload($request->imageFieldName);
仅此方法就足以上传图像。包括目录、名称、前缀和扩展名在内的其他值,如果启用,则从配置中设置的默认值获取。
此方法输入参数的类型为UploadedFile,它来自包含图像的发送请求。
此方法的返回值是您使用的图像完整地址,注意此方法的返回值被保存为数据库中的图像地址。
考虑以下示例
在表单中
<form method="post" action="{{route('uploadImage')}}" enctype="multipart/form-data"> <input type="hidden" name="_token" id="csrf-token" value="{{ Session::token() }}" /> <div> <label for="file">Choose file to upload</label> <input type="file" id="file" name="imageInput" multiple/> </div> <div> <button type="submit">Submit</button> </div> </form>
在类或控制器方法中
namespace App\Http\Controllers; use Amirsahra\Illustrator\Facade\Illustrator; use App\MyImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; class HomeController extends Controller { public function uploadImage(Request $request) { $imgPath = Illustrator::upload($request->imageInput); MyImage::create([ 'path' => $imgPath ]); return Redirect::back()->with(['msg' => 'successfully']); } }
您可以输入您的目录。如果您想使用在配置文件中指定的默认目录,则无需使用此方法。
namespace App\Http\Controllers; use Amirsahra\Illustrator\Facade\Illustrator; use App\MyImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; class HomeController extends Controller { public function uploadImage(Request $request) { $imgPath = Illustrator::setDir('myDirectory/images')->upload($request->imageInput); MyImage::create([ 'path' => $imgPath ]); return Redirect::back()->with(['msg' => 'successfully']); } }
指定图像名称,或默认情况下将创建一个随机字符串,长度与配置文件中指定的长度相同。
注意:图像名称必须不带类型,其类型从图像文件本身获取,例如,名称imageName.png
是不正确的
namespace App\Http\Controllers; use Amirsahra\Illustrator\Facade\Illustrator; use App\MyImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; class HomeController extends Controller { public function uploadImage(Request $request) { $imgPath = Illustrator::setName('imageName')->upload($request->imageInput); MyImage::create([ 'path' => $imgPath ]); return Redirect::back()->with(['msg' => 'successfully']); } }
磁盘有两种模式:公共和本地
如果想要通过地址访问图片,必须将磁盘设置为公共。
如果想要图片受保护且只能下载,选择本地磁盘。
namespace App\Http\Controllers; use Amirsahra\Illustrator\Facade\Illustrator; use App\MyImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; class HomeController extends Controller { public function uploadImage(Request $request) { $imgPath = Illustrator::setDisk('public')->upload($request->imageInput); MyImage::create([ 'path' => $imgPath ]); return Redirect::back()->with(['msg' => 'successfully']); } }
图片访问
通过图片的地址(上传时创建)和磁盘类型,可以正确访问图片。
如果想让图片在页面上显示,其磁盘必须设置为公共,并在该地址的第一部分添加 storage/
,图片就会显示,如下例所示
<img src="{{asset("storage/myDirectory/images/imageName.png")}}" alt="image" >
如果想让图片受保护且只能下载,选择其本地磁盘。
要保护访问保存时磁盘为本地的地址的图片
Storage::disk('local')->download('myDirectory/images/imageName.png');
所有方法都可以一起使用,但上传方法必须放在最后
namespace App\Http\Controllers; use Amirsahra\Illustrator\Facade\Illustrator; use App\MyImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; class HomeController extends Controller { public function uploadImage(Request $request) { $imgPath = Illustrator::setName('imageName') setDir('myDirectory/images') setDisk('public') ->upload($request->imageInput); MyImage::create([ 'path' => $imgPath ]); return Redirect::back()->with(['msg' => 'successfully']); } }
更新图片非常简单,如上所述,而不是使用上传方法,应该使用带有要更新图片完整目录参数的更新方法。
这样,当前图片将被删除,新图片将替换它 namespace App\Http\Controllers;
use Amirsahra\Illustrator\Facade\Illustrator; use App\MyImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; class HomeController extends Controller { public function updateImage(Request $request,MyImage $myImage) { $newImgPath = Illustrator::setName('imageName') setDir('myDirectory/images') setDisk('public') ->update($request->imageInput,$myImage->path); $myImage->update([ 'path' => $newImgPath ]); return Redirect::back()->with(['msg' => 'update image successfully']); } }