Laravel 8 文件的上传/下载/显示的实例

如何实现对文件的操作,实现上传,下载,展示等等功能,我们通过编写一个简单的实例来了解其中具体的内容。

文件列表的展示/文件上传/文件下载

首先我们需要创建两个文件,一个视图文件,一个控制器,来实现前后端的互通,然后我们在 storage\app\ 创建一个 uploadfiles 的文件夹,用于存储文件。

创建一个名为 filesmanagement.blade.php 的视图文件,包括基本的样式和布局,如下图:

<!doctype html>
<html lang="{
  { str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{
  { csrf_token() }}">

    <title>Files Management</title>

    <!-- Scripts -->
    <script src="{
  { asset('js/app.js') }}" defer></script>

    <!-- Fonts -->
    <link rel="dns-prefetch" href="//fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">

    <!-- Styles -->
    <link href="{
  { asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
    <div id="app">
        <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
            <div> This is a demo for file show, upload, download </div>
        </nav>

        <main class="py-4">
            <div class="container">
                <div class="row justify-content-center">
                    <div class="col-md-10">
                        <div class="card">
                            <div class="card-header">Files Management</div>

                            <div class="card-body">
                                <form>
                                <!-- 具体的内容稍后填充 -->
                                </form>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </main>
    </div>
</body>
</html>

创建一个名为 FilesManagementController.php 的控制器,里面包含三个方法,如下:

<?php

namespace App\Http\Controllers\TryDemo;

use App\Http\Controllers\Controller;


class FilesManagementController extends Controller
{

    public function showFiles()
    {
        // 页面展示文件列表
    }


    public function uploadFile()
    {
        // 上传文件时调用
    }

    
    public function downloadFile()
    {
        // 下载文件时调用
    }

}

然后我们需要在路由配置文件里添加对控制器里具体方法的调用,如下图:


进入页面,展示所有文件列表
Route::get('/files', [App\Http\Controllers\TryDemo\FilesManagementController::class, 'showFiles']);

通过 form 表单提交上传的文件
设置此路由名为 UploadFile,之后会在视图文件里使用
Route::post('/files', [App\Http\Controllers\TryDemo\FilesManagementController::class, 'uploadFile'])
     ->name('UploadFile');

通过点击文件列表的超链接,在浏览器下载指定的文件,{filename} 为文件名,作为参数传入控制器
设置此路由名为 DownloadFile,之后会在视图文件里使用
Route::get('/files/{filename}', [App\Http\Controllers\TryDemo\FilesManagementController::class, 'downloadFile'])
     ->name('DownloadFile');

路由配置已搭建好,在继续完善实例之前,我们需要先了解一下关于文件存储的一些概念,首先在项目的根目录下有两个文件夹目录,storage和 public ,storage 和 public 目录的主要区别在于 storage 目录是用于存放应用程序生成的文件,例如日志文件、缓存文件、上传的文件等等。而 publi

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel 中使用 GuzzleHttp/Guzzle 发送邮件可以通过以下步骤实现: 1. 安装 GuzzleHttp/Guzzle 可以使用 Composer 进行安装: ``` composer require guzzlehttp/guzzle ``` 2. 创建邮件发送类 在 app 目录下创建一个名为 MailSender 的类,代码如下: ```php <?php namespace App; use GuzzleHttp\Client; class MailSender { protected $client; public function __construct() { $this->client = new Client([ 'base_uri' => 'https://api.sendgrid.com/v3/', 'headers' => [ 'Authorization' => 'Bearer ' . env('SENDGRID_API_KEY'), 'Content-Type' => 'application/json' ] ]); } public function send($to, $subject, $content) { $response = $this->client->request('POST', 'mail/send', [ 'json' => [ 'personalizations' => [ [ 'to' => [ [ 'email' => $to ] ] ] ], 'from' => [ 'email' => 'sender@example.com' ], 'subject' => $subject, 'content' => [ [ 'type' => 'text/plain', 'value' => $content ] ] ] ]); return $response->getStatusCode(); } } ``` 其中,使用 GuzzleHttp\Client 创建一个 HTTP 客户端,设置 base_uri 为 SendGrid 邮件服务的 API 地址,headers 中包含 Authorization 和 Content-Type 信息。send() 方法接受收件人邮箱地址、邮件主题和邮件内容,使用 HTTP POST 请求发送邮件。 3. 在控制器中使用 MailSender 发送邮件 在需要发送邮件的控制器中,使用 MailSender 类发送邮件,示例代码如下: ```php <?php namespace App\Http\Controllers; use App\MailSender; use Illuminate\Http\Request; class MailController extends Controller { public function send(Request $request) { $to = $request->input('to'); $subject = $request->input('subject'); $content = $request->input('content'); $mailSender = new MailSender(); $statusCode = $mailSender->send($to, $subject, $content); return response()->json(['status' => $statusCode]); } } ``` 在 send() 方法中,从请求中获取收件人邮箱地址、邮件主题和邮件内容,然后实例化 MailSender 类并调用 send() 方法发送邮件。 4. 配置 SendGrid API 密钥 在 .env 文件中添加 SendGrid API 密钥: ``` SENDGRID_API_KEY=your_api_key_here ``` 至此,使用 GuzzleHttp/Guzzle 发送邮件的配置就完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值