laravel下使用阿里云oss上传图片

对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上。最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss。

在研究了一下以后,摆着不自己造轮子的原则,决定使用AliyunOss,国人laravel高手JohnLui封装的一个阿里云oss的操作库。

AliyunOSS 是阿里云 OSS 官方 SDK 的 Composer 封装,支持任何 PHP 项目,包括 Laravel、Symfony、TinyLara 等等。Github 地址:https://github.com/johnlui/AliyunOSS

安装

将以下内容增加到 composer.json:


1

2

3

4

5

require: {

    "johnlui/aliyun-oss": "dev-master"

}

然后运行 `composer update。

使用(以 Laravel 为例)

构建 Service 文件

新建 `app/services/OSS.php`,内容可参考:OSSExample.php


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

<?php

/**

 * Created by PhpStorm.

 * User: Administrator

 * Date: 2016/9/6

 * Time: 10:14

 */

namespace App\Services;

use JohnLui\AliyunOSS\AliyunOSS;

use Config;

class OSS {

    private $ossClient;

    public function __construct($isInternal = false)

    {

        $serverAddress = $isInternal ? Config::get(‘oss.ossServerInternal‘) : Config::get(‘oss.ossServer‘);

        $this->ossClient = AliyunOSS::boot(

            $serverAddress,

            Config::get(‘oss.AccessKeyId‘),

            Config::get(‘oss.AccessKeySecret‘)

        );

    }

    // 默认上传文件使用内网,免流量费

    public static function upload($ossKey, $filePath, $isInternal = true)

    {

        $oss = new OSS($isInternal);

        $oss->ossClient->setBucket(‘你的Bucket名字‘);

        $oss->ossClient->uploadFile($ossKey, $filePath);

    }

    /**

     * 直接把变量内容上传到oss

     * @param $osskey

     * @param $content

     */

    public static function uploadContent($osskey,$content)

    {

        $oss = new OSS(true); // 上传文件使用内网,免流量费

        $oss->ossClient->setBucket(‘你的Bucket名字‘);

        $oss->ossClient->uploadContent($osskey,$content);

    }

    /**

     * 删除存储在oss中的文件

     *

     * @param string $ossKey 存储的key(文件路径和文件名)

     * @return

     */

    public static function deleteObject($ossKey)

    {

        $oss = new OSS(true); // 上传文件使用内网,免流量费

        return $oss->ossClient->deleteObject(‘你的Bucket名字‘, $ossKey);

    }

    /**

     * 复制存储在阿里云OSS中的Object

     *

     * @param string $sourceBuckt 复制的源Bucket

     * @param string $sourceKey - 复制的的源Object的Key

     * @param string $destBucket - 复制的目的Bucket

     * @param string $destKey - 复制的目的Object的Key

     * @return Models\CopyObjectResult

     */

    public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey)

    {

        $oss = new OSS(true); // 上传文件使用内网,免流量费

        return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);

    }

    /**

     * 移动存储在阿里云OSS中的Object

     *

     * @param string $sourceBuckt 复制的源Bucket

     * @param string $sourceKey - 复制的的源Object的Key

     * @param string $destBucket - 复制的目的Bucket

     * @param string $destKey - 复制的目的Object的Key

     * @return Models\CopyObjectResult

     */

    public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey)

    {

        $oss = new OSS(true); // 上传文件使用内网,免流量费

        return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);

    }

    public static function getUrl($ossKey)

    {

        $oss = new OSS();

        $oss->ossClient->setBucket(‘你的Bucket名字‘);

        return $oss->ossClient->getUrl($ossKey, new \DateTime("+1 day"));

    }

    public static function createBucket($bucketName)

    {

        $oss = new OSS();

        return $oss->ossClient->createBucket($bucketName);

    }

    public static function getAllObjectKey($bucketName)

    {

        $oss = new OSS();

        return $oss->ossClient->getAllObjectKey($bucketName);

    }

    /**

     * 获取指定Object的元信息

     *

     * @param  string $bucketName 源Bucket名称

     * @param  string $key 存储的key(文件路径和文件名)

     * @return object 元信息

     */

    public static function getObjectMeta($bucketName, $osskey)

    {

        $oss = new OSS();

        return $oss->ossClient->getObjectMeta($bucketName, $osskey);

    }

}

  

增加相关配置

在 app/config/oss.php 中增加以下配置:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

/**

 * Created by PhpStorm.

 * User: Administrator

 * Date: 2016/9/6

 * Time: 10:17

 */

return [

    ‘useInternal‘ => false,//是否使用OSS内网传输来省流量

    ‘ossServer‘ => ‘服务器外网地址‘, //青岛为 http://oss-cn-qingdao.aliyuncs.com

    ‘ossServerInternal‘ => ‘服务器内网地址‘, //青岛为 http://oss-cn-qingdao-internal.aliyuncs.com

    ‘AccessKeyId‘ => ‘阿里云给的AccessKeyId‘,

    ‘AccessKeySecret‘ => ‘阿里云给的AccessKeySecret‘,

];

  

使用


1

2

3

4

5

6

7

8

9

use App\Services\OSS;

OSS::upload(‘文件名‘, ‘本地路径‘); // 上传一个文件

echo OSS::getUrl(‘某个文件的名称‘); // 打印出某个文件的外网链接

OSS::createBucket(‘一个字符串‘); // 新增一个 Bucket。注意,Bucket 名称具有全局唯一性,也就是说跟其他人的 Bucket 名称也不能相同。

OSS::getAllObjectKey(‘某个 Bucket 名称‘); // 获取该 Bucket 中所有文件的文件名,返回 Array。

  

常见问题:

① Undefined index: host

解决方案:https://github.com/johnlui/AliyunOSS/issues/9

② The specified bucket is not valid.

错误原因:你们的内外地址肯定是给了http://****.oss-cn-beijing.aliyuncs.com 这里的*是指bucket名字,  然后你们调用方法的时候有传入了一个bucket的名字, 然后它给你们拼接起来 就变成了http://bucketName.bucketName.oss-cn..........com

解决方案:在配置文件里面ALIOSS_SERVER=http://oss-cn-beijing.aliyuncs.com   比如这个外网地址前面不要加上 bucket名字

项目存在的不足:

目前调用SDK没有一个状态值返回,所以不知道上传是否会存在BUG,过段时间尽量Fork并修改一下。

个人建议:

尽量使用laravel自带的job和queue来完成upload操作。

时间: 2024-10-12 16:03:48

laravel下使用阿里云oss上传图片的相关文章

The difference between the request time and the current time is too large.阿里云oss上传图片报错

The difference between the request time and the current time is too large. 阿里云oss上传图片的时候报错如上, 解决办法,把系统时间自动同步成对应的时区的时间.

阿里云oss上传图片

1.首先我们要下载阿里云oss的sdk包:(可以下载原版的,改过的通用版在本人的百度云,嘎嘎嘎~) 2.下载好之后放到项目文件目录里面 3.要在需要的控制器引用这个sdk文件例如: include("./ThinkPHP/Library/Vendor/oss/index.php"); 然后实例化这个类,调用上传的方法 =================================================== 再看类文件:下载好了以后修改类文件的index.php <?

使用阿里云OSS,上传图片时报错:java.lang.ClassNotFoundException:org.apache.http.ssl.TrustStrategy

问题产生的原因就是jar包版本问题,阿里的SDk引入的pom中依赖的httpclient和httpcore版本高于当前项目中已经设置的版本. 解决: 删除低版本后,更新下项目. 原文地址:https://www.cnblogs.com/xingrui/p/10256837.html

Laravel 下结合阿里云邮件推送服务

参考1:https://github.com/rainwsy/aliyundm 参考2:https://github.com/HyanCat/aliyun-direct-mail, https://packagist.org/packages/hyancat/aliyun-direct-mail?q=&orderBys%5B0%5D%5Bsort%5D=favers&orderBys%5B0%5D%5Border%5D=asc, http://blog.jayxhj.com/2016/05

简单上传图片到阿里云OSS

OSS主要为用户提供数据存储服务,用户可以通过以下操作来处理OSS上的数据: 1.创建.查看.罗列.删除 Bucket: 2.修改.获取Bucket的访问权限: 3.上传.查看.罗列.删除Object/Object Group: 4.访问时支持If-Modified-Since和If-Match等HTTP参数.特点具体如下: 1.易用性:简单易用,便于管理,深度集成数据处理服务: 2.高可靠:多重冗余备份,服务设计可用性不低于99.99%: 3.强安全:多层次安全防护,支持跨区域复制.异地容灾机

Windows环境下用C#编程将文件上传至阿里云OSS笔记

本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/24962567 作者:张建波 邮箱: [email protected]  欢迎来信交流! 第1步: 下载阿里云OSS的SDK包,由于笔者的环境是PHP服务,所以下载的是PHP的SDK包 http://help.aliyun.com/view/13438816.html 第2步:将代码整合进你的网站或服务中. 第3步:配置OSS访问接口 (1)找到c

Java中使用RestFul接口上传图片到阿里云OSS服务器

1.接口方法 import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation

上传图片到阿里云OSS和获取上传图片的外网url的步骤

<form action="/bcis/api/headImgUpload.json" method="post" enctype="multipart/form-data">     <input type="file" name="file">     <input type="submit" value="提交"> </

阿里云OSS上传文件模块

1 package com.hughes.bcsc.app.core.util.oss; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.IOExceptio