又拍云上传

首先我使用 Google 搜索 Laravel upyun php-sdk 这些关键词
file
首先搜索到的是 JellyBoolLaravel 扩展包,这个扩展包把又拍云的 php-sdk 集成到 Laravel 项目会比较方便。

composer require "jellybool/flysystem-upyun"

安装完成之后

config/app.php 里添加 UpyunServiceProvider:

'providers' => [
    // Other service providers...
    JellyBool\Flysystem\Upyun\UpyunServiceProvider::class,
],

config/filesystems.phpdisks 中添加下面的配置:

return [
    //...
      'upyun' => [
                'driver'        => 'upyun', 
                'bucket'        => env('UPYUN_BUCKET',  '服务名称')
                'operator'      => env('UPYUN_OPERATOR', '操作员的名字'),
                'password'      => env('UPYUN_PASSWORD', '操作员的密码'),
                'domain'        => env('UPYUN_DOMAIN', '服务分配的域名'),
                'protocol'     => 'http', // 服务使用的协议,如需使用 http,在此配置 http
            ],
    //...
];

然后在 .env 文件配置, 并且拷贝到 .env.example 文件里

UPYUN_BUCKET=
UPYUN_OPERATOR=
UPYUN_PASSWORD=
UPYUN_DOMAIN=

file

域名可绑定自己的线上项目域名,然后在 内容管理 里面添加管理员和密码(如果管理员和密码不匹配就会报)

401 Unauthorized 错误

快速测试

如果你想快速测试自己的配置信息是否正确又或者服务是否可行

resources/views/pages 下,新建文件视图 image.blade.php

@extends('layouts.app')
@section('title', '又拍云图片上传测试')

@section('content')
    <div class="container">
        <h1 class="text-center">图片上传</h1>
        <div class="content">
            <form enctype="multipart/form-data" method="post" action="/image">
                {{ csrf_field() }}
                <div class="form-group">
                    <input type="file" name="image" value="选择文件">
                </div>
                <div class="form-group">
                    <input type="submit" class="form-control" value="上传图片">
                </div>
            </form>
        </div>
    </div>
@stop

然后在 routes/web.php 文件里添加以下代码:

<?php
use Illuminate\Http\Request;
.
.
.
// 图片上传测试
Route::get('/image', function () {
    return view('pages.image');
});

Route::post('/image', function (Request $request) {
    $domain = "http://" . config('filesystems.disks.upyun.domain');
    $file_path = Storage::disk('upyun')->put('/image', $request->file('image'));
    return $domain . "/$file_path";
});

完成之后访问 http://项目名称.test/image 链接,在视图里面测试图片上传,如果上传成功会返回完整的链接。

复制链接,在新的窗口打开。

如果图片没有显示,可能要等 3 - 10 分钟才神奇的显示。

如果有谁知道是什么原因,麻烦告诉我一下。

可在 Laravel 文档的 文件存储 中查看更多的可用方法。

CNAME 可绑定你线上的二级域名: upload.线上域名 解析记录冲突判断规则

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4

想问下,上传后,本地的文件是不是应该删除掉?

5年前 评论

@qianfan 上传只是执行 copy 操作,并不会删除本地的文件。

5年前 评论

我觉得可以完善下呢!就是上传成功后,删除本地的文件,个人建议!

5年前 评论

官方都不维护仓库 issue 了,凉凉

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!