confrariaweb/laravel-file

Laravel 文件包

dev-main 2023-07-29 19:52 UTC

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

使用方法

安装包后,您可以在项目中开始使用它。以下是操作步骤:

  1. 在需要使用 FileService 的地方导入该类
use ConfrariaWeb\File\FileService;
  1. 实例化 FileService 类
$fileService = new FileService();
  1. 使用 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 表中。

实际示例

以下是一些使用和未使用模型绑定的文件上传的实际示例。

  1. 未绑定到模型的文件上传
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.
  1. 绑定到模型的文件上传
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 项目中简化文件管理过程,实现轻松高效的文件上传,无论文件来源如何。该包旨在满足常见的文件上传和存储需求,提供灵活性和易用性。请随时在您的项目中使用本包,并尽可能提供建议和改进,使其更加完善!