confrariaweb / laravel-file
Laravel 文件包
This package is not auto-updated.
Last update: 2024-09-22 09:49:04 UTC
README
Laravel File Package 是一个 Laravel 扩展包,它提供了一个文件管理服务,以简化 Laravel 中的文件上传和存储过程。使用此包,您可以通过请求上传文件,提供文件的下载链接,或者直接将本地文件路径存储到 Laravel 的存储系统中。
文件管理是许多 Web 项目的常见任务,Laravel 提供了原生功能来处理文件存储,无论是本地文件系统还是云存储服务如 Amazon S3。然而,实现多种上传方式(请求、URL 和本地路径)并进行区分可能有些繁琐。
Laravel File 包简化了这一过程,提供了一个名为 FileService 的服务类,它能够透明且直观地处理所有这些上传方式。使用此包,您可以通过任一选项上传文件,并支持一次上传多个文件。
安装
要安装此包到您的 Laravel 项目中,可以使用 Composer
composer require confrariaweb/laravel-file
使用方法
安装包后,您可以在项目中开始使用它。以下是操作步骤:
- 在需要使用 FileService 的地方导入该类
use ConfrariaWeb\File\FileService;
- 实例化 FileService 类
$fileService = new FileService();
- 使用 storeFile() 方法上传文件
// Exemplo com Request $fileService->storeFile($request, 'uploads'); // Exemplo com URL $fileService->storeFile('https://example.com/image.jpg', 'uploads'); // Exemplo com caminho local $fileService->storeFile('/path/to/local/image.jpg', 'uploads');
上传示例
以下是一些使用 Laravel File Package 进行文件上传的实用示例。
使用请求上传单个文件
use ConfrariaWeb\File\FileService; use Illuminate\Http\Request; class FileController extends Controller { public function upload(Request $request) { $fileService = new FileService(); $filePath = $fileService->storeFile($request, 'uploads'); // Faça algo com o caminho do arquivo armazenado, se necessário return response()->json(['message' => 'Arquivo enviado com sucesso.', 'file_path' => $filePath]); } }
使用 URL 上传多个文件
use ConfrariaWeb\File\FileService; class FileController extends Controller { public function uploadFromUrls() { $fileService = new FileService(); $filePaths = $fileService->storeFile([ 'https://example.com/image1.jpg', 'https://example.com/image2.jpg', 'https://example.com/image3.jpg', ], 'uploads'); // Faça algo com os caminhos dos arquivos armazenados, se necessário return response()->json(['message' => 'Arquivos enviados com sucesso.', 'file_paths' => $filePaths]); } }
使用本地路径上传单个文件
use ConfrariaWeb\File\FileService; class FileController extends Controller { public function uploadFromLocal() { $fileService = new FileService(); $filePath = $fileService->storeFile('/path/to/local/image.jpg', 'uploads'); // Faça algo com o caminho do arquivo armazenado, se necessário return response()->json(['message' => 'Arquivo enviado com sucesso.', 'file_path' => $filePath]); } }
使用本地路径上传多个文件
use ConfrariaWeb\File\FileService; class FileController extends Controller { public function uploadMultipleFromLocal() { $fileService = new FileService(); $filePaths = $fileService->storeFile([ '/path/to/local/image1.jpg', '/path/to/local/image2.jpg', '/path/to/local/image3.jpg', ], 'uploads'); // Faça algo com os caminhos dos arquivos armazenados, se necessário return response()->json(['message' => 'Arquivos enviados com sucesso.', 'file_paths' => $filePaths]); } }
如何使用可选的模型绑定
要使用可选的模型绑定进行文件上传,可以按照以下模式使用:
use ConfrariaWeb\File\FileService; use App\Models\User; // Substitua pelo modelo que deseja vincular (se aplicável) // ... // Crie uma instância do FileService $fileService = new FileService(); // Defina o modelo, descrição e status do arquivo (opcional) $model = User::find(1); // Substitua pelo modelo que deseja vincular $description = 'Descrição do arquivo'; $status = true; // Chame o método model() para definir as informações do modelo $fileService->model($model, $description, $status); // Use o método storeFile() para fazer o upload do arquivo e, se fornecido um modelo, salvá-lo no banco de dados $filePath = $fileService->storeFile('/path/to/local/file.txt', 'uploads'); // ...
在上面的示例中,路径 /path/to/local/file.txt 会被存储到 Laravel 的存储中,如果提供了 User::find(1),则文件相关的信息,如 type、size、mime_type、description 和 status,会被存储在数据库的 files 表中。
实际示例
以下是一些使用和未使用模型绑定的文件上传的实际示例。
- 未绑定到模型的文件上传
use ConfrariaWeb\File\FileService; // ... $fileService = new FileService(); $filePath = $fileService->storeFile('/path/to/local/image.jpg', 'uploads'); // O arquivo 'image.jpg' será armazenado no storage, sem vinculação a nenhum modelo.
- 绑定到模型的文件上传
use ConfrariaWeb\File\FileService; use App\Models\Post; // ... $fileService = new FileService(); // Defina o modelo, descrição e status do arquivo (opcional) $model = Post::find(1); // Substitua pelo modelo que deseja vincular $description = 'Imagem de capa do post'; $status = true; // Chame o método model() para definir as informações do modelo $fileService->model($model, $description, $status); // Use o método storeFile() para fazer o upload do arquivo e vinculá-lo ao modelo 'Post::find(1)' no banco de dados $filePath = $fileService->storeFile('/path/to/local/cover.jpg', 'uploads'); // O arquivo 'cover.jpg' será armazenado no storage e as informações relacionadas serão salvas na tabela 'files', vinculadas ao modelo 'Post::find(1)'.
通过可选的模型绑定功能,Laravel File 包提供了更多的灵活性来存储文件附加信息,使其在应用中更加通用。请根据您的具体需求进行尝试和调整!
贡献
如果您发现任何问题或有改进建议,请随时在 Laravel File Package 的仓库中创建问题或发送 pull request。
许可证
本包采用 MIT 许可证。
作者
Laravel File Package 由 Rafael Zingano 开发。
使用 Laravel File Package,您可以在 Laravel 项目中简化文件管理过程,实现轻松高效的文件上传,无论文件来源如何。该包旨在满足常见的文件上传和存储需求,提供灵活性和易用性。请随时在您的项目中使用本包,并尽可能提供建议和改进,使其更加完善!