精华内容
下载资源
问答
  • 2019-12-25 11:14:08foolish995华为云对象存储 obs 文件流上传/*** obs 二进制流上传** @return \Illuminate\Http\JsonResponse*/public function uploadStream(Request $request){// 文件名$params['file_name'] = ...

    2019-12-25 11:14:08

    foolish

    995

    华为云对象存储 obs 文件流上传

    /**

    * obs 二进制流上传

    *

    * @return \Illuminate\Http\JsonResponse

    */

    public function uploadStream(Request $request)

    {

    // 文件名

    $params['file_name'] = $request->header('filename') ? $request->header('filename') : md5 ( mt_rand () . uniqid () ) . '.dat';

    // 流信息

    $params['stream_info'] = file_get_contents('php://input', 'r');

    //obs 配置信息['accessKeyId'=>'','accessKeySecret'=>'','endpoint'=>'','bucket'=>'','host'=>'']

    $obsInfo = Common::getObsInfo();

    // obs 保存路径

    $params['file_path'] = 'client_info' .DIRECTORY_SEPARATOR. date('Ymd') .DIRECTORY_SEPARATOR. $params['file_name'];

    $response = Common::fileUploadStream($params, $obsInfo);

    }

    /**

    * 二进制流文件上传

    * @param $file_info 上传文件信息 file_path:文件上传路径,stream_info:流信息

    * @param $obsConfig obs 相关配置信息

    */

    static public function fileUploadStream($file_info, $obsConfig)

    {

    //别忘了use Obs\ObsClient;use obs\ObsException;

    $client = ObsClient::factory([

    'key' => $obsConfig['accessKeyId'],

    'secret' => $obsConfig['accessKeySecret'],

    'endpoint' => $obsConfig['endpoint'],

    'socket_timeout' => 300,

    'connect_timeout' => 60

    ]);

    try {

    $client->putObject([

    'Bucket' => $obsConfig['bucket'],

    'Key' => $file_info['file_path'],

    'Body' => $file_info['stream_info']

    ]);

    } catch(ObsException $e) {

    return false;

    }

    // 返回 obs 上传地址

    return ['file_url'=>$obsConfig['host'] . DIRECTORY_SEPARATOR . $file_info['file_path']];

    }

    展开全文
  • 通过使用Java+SDK管理华为云对象存储OBS,了解对象存储的基本原理和操作,熟悉SDK的使用方法,为后续需要开发复杂功能提供入门准备。 准备动作 1、电脑上安装Java开发环境+Eclipse,可参考网上的教程: Java安装...

    实验目的

    通过使用Java+SDK管理华为云对象存储OBS,了解对象存储的基本原理和操作,熟悉SDK的使用方法,为后续需要开发复杂功能提供入门准备。

    准备动作

    1、电脑上安装Java开发环境+Eclipse,可参考网上的教程:
    Java安装教程:http://www.runoob.com/java/java-environment-setup.html#win-install
    Eclipse+汉化教程:https://blog.csdn.net/weixin_41848531/article/details/81736414

    2、下载华为云OBS SDK(https://developer.huaweicloud.com/sdk?OBS),笔者编辑本文时,最新版本是OBS Java SDK 3.0.0 ,SDK安装过程如下:
    a.下载OBS Java SDK开发包。
    b. 在Eclipse中创建一个Java工程
    b. 将解压后的文件:esdk-obs-java-<versionId>.jar 以及third_party文件夹下所有的JAR包拷贝到您的项目目录中。
    c. 在Eclipse中选择您的工程,右击选择 Properties > Java Build Path > Add JARs。

    3、下载OBS的访问密钥key文件。
    a. 登陆华为云网站(www.huaweicloud.com),进入OBS控制台,下载访问密钥。

    密钥key是一个xxx.csv的表格文件,其中Access Key Id对应OBS API中的ak,Secret Access Key对应OBS API中的sk。

    密钥key的作用:
    通过网站访问对象存储OBS,需要先通过账号密码登陆网站。通过代码访问OBS,如果也需要输入账号密码,就会使得的代码变复杂。因此密钥key可以认为是经过加密的账号和密码,代码中可直接使用。 密钥key文件只在生成的时候提供下载,因此下载后需妥善保存。

    4、打开JDK包中的开发指南《对象存储Java SDK开发指南.doc》内含丰富的说明。

    操作步骤

    1、在eclipse工程中左侧工具栏中找到自动生成的xxx.java,编写一个java类,输出欢迎语句。点击eclispe工具栏上的 调试或运行按钮,在结果中可看到欢迎语句。

    package main;
    
    import java.io.*;
    import java.io.IOException;
    
    public class main {
    	
    	public static void main(String[] args) 
    	{
    		System.out.println("welcome to china!!!");	
    	}			
    }

    2、创建一个OBS客户端。电脑是访问OBS的客户端,华为云的OBS是服务器。
    2.1 公有云的数据中心是分区域的,每个OBS访问地址都是通过“后缀endpoint”来指定数据是存放在哪个区域的数据中心的。
    “后缀endpoint”的查询地址:https://developer.huaweicloud.com/endpoint

    2.2 创建一个OBS客户端
    新增导入OBS相关库文件,并在main函数中添加OBS客户端的打开和关闭操作。

    import com.obs.services.ObsClient;
    import com.obs.services.exception.ObsException;
    import com.obs.services.model.*;
    
    
    String endPoint = "https://yourdomainname"; 
    String ak = "*** Provide your Access Key ***"; 
    String sk = "*** Provide your Secret Key ***"; 
    // 创建ObsClient实例 
    ObsClient obsClient = new ObsClient(ak, sk, endPoint); 
      
    // 关闭obsClient 
    obsClient.close();

    3.3 参考《对象存储服务Java SDK开发指南.doc》分别编辑创建桶、上传对象和查看所有对象,具体代码参考后续完整代码。

    3.4 点击eclipse的调试或运行按钮,在控制台中显示创建桶成功,显示所有对象成功。
    控制台中提示日志插件和性能统计错误,不影响功能,可忽略不计。

    3.5 在华为云OBS 对象存储控制台中,可看到新增生成的桶和上传的文件。

    完整代码

    package main;
    
    import java.io.*;
    import java.io.IOException;
    
    import com.obs.services.ObsClient;
    import com.obs.services.exception.ObsException;
    import com.obs.services.model.*;
    
    
    public class main {
    	
    	/* 初始化OBS客户端所需的参数 */
    	private static final String endPoint     = "https://your endpoint";
    	private static final String ak           = "your ak";
    	private static final String sk           = "your sk";
    	private static final String g_bucketName = "hello-obs-demo";
    	private static final String g_bucketLoc  = "cn-south-1";
    
    	public static void main(String[] args) 
    	{
    		System.out.println("welcome to china!!!");
    		
    		/* 创建OBS客户端 */
    		ObsClient obsClient = new ObsClient(ak,sk,endPoint);
    		ObsBucket obsBucket;
    		
    		try 
    		{
    			/* 创建一个桶 */
    			obsBucket = createBucket(obsClient);			
    	
    			/* 从本地笔记本上传文件到桶里面 */
    			uploadFile(obsClient, obsBucket);
    						
    			/* 列举对象(文件)的信息 */
    			listFile(obsClient,obsBucket);
    			
    			/* 关闭客户端 */
    			
    		}
    		catch (ObsException e)
    		{
    			System.out.println("main 函数出现错误!!!");
    		}
    		
    		/* 关闭obs客户端  */
    		closeObsClient(obsClient);				
    	}
    	
    	
    	/* 创建一个桶 */
    	private static ObsBucket createBucket(ObsClient obsClient) throws ObsException
    	{
    		ObsBucket obsBucket = new ObsBucket(g_bucketName,g_bucketLoc);
            obsClient.createBucket(obsBucket);
            System.out.println("Create bucket:" + g_bucketName + " successfully!");	
            return obsBucket;
    	}
    	
    	/* 创建一个对象(文件) */
    	private static void uploadFile(ObsClient obsClient, ObsBucket obsBucket) throws ObsException
    	{
    		File newfile = new File("C:\\Users\\xiaoniu\\Desktop\\temp\\hello.txt");
    		obsClient.putObject(obsBucket.getBucketName(), "folder/", newfile);
    		obsClient.putObject(obsBucket.getBucketName(), "hello1", newfile);
    		obsClient.putObject(obsBucket.getBucketName(), "hello2", newfile);
    	}
    	
    	/* 列举对象(文件)的信息 */
    	private static void listFile(ObsClient obsClient, ObsBucket obsBucket) throws ObsException
    	{
    		System.out.println("开始测试桶里面的对象信息");
    		ObjectListing objList = obsClient.listObjects(obsBucket.getBucketName());
    		for (ObsObject obj : objList.getObjects())
    		{
    			System.out.println("--:"+obj.getObjectKey()+" (size=" + obj.getMetadata().getContentLength()+")");			
    		}
    	}
    	
    	/* 关闭客户端 */
    	private static void closeObsClient(ObsClient obsClient) 
    	{		
    			try
    			{
    				obsClient.close();
    			}
    			catch (IOException e)
    			{
    				System.out.println("close obs client error.");
    			}	
    			
    	}
    		
    }
    
    
    

     

    展开全文
  • package ...import com.obs.services.ObsClient;import com.obs.services.exception.ObsException;import com.obs.services.model.*;import java.io.*;import java.util.ArrayList;import java....

    package com.obsupload.configur;

    import com.obs.services.ObsClient;

    import com.obs.services.exception.ObsException;

    import com.obs.services.model.*;

    import java.io.*;

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    /**

    * @Author: zhengwj

    * @Description:

    * @Date: 2020/4/20 12:47

    * @Version: 1.0

    */

    public class OBSHandler {

    private String accessKeyId;// 华为云的 Access Key Id

    private String accessKeySecret;// 华为云的 Access Key Secret

    private String endpoint; // 华为云连接的地址节点

    private String obsBucketName; // 创建的桶的名称

    private String url; // 访问OBS文件的url

    private static ObsClient obsClient; // 进行操作的华为云的客户端组件

    /**

    * 创建华为云OBS的本地控制器

    * @param accessKeyId

    * @param accessKeySecret

    * @param endpoint

    */

    public OBSHandler(String accessKeyId, String accessKeySecret, String endpoint) {

    this.accessKeyId = accessKeyId;

    this.accessKeySecret = accessKeySecret;

    this.endpoint = endpoint;

    }

    public OBSHandler(String accessKeyId, String accessKeySecret, String endpoint, String obsBucketName) {

    this.accessKeyId = accessKeyId;

    this.accessKeySecret = accessKeySecret;

    this.endpoint = endpoint;

    this.obsBucketName = obsBucketName;

    }

    /**

    * 设置OBS访问的CDN路径

    * @param url

    */

    public void setUrlForCDN(String url) {

    this.url = url;

    }

    /**

    * 设置OBS操作的同桶名称

    * @param obsBucketName

    */

    public void setObsBucketName(String obsBucketName) {

    this.obsBucketName = obsBucketName;

    }

    /**

    * 获取华为云提供的操作客户端实体类

    * @return

    */

    public ObsClient getObsClient() {

    if(obsClient == null) {

    obsClient = new ObsClient(accessKeyId, accessKeySecret, endpoint);

    }

    return obsClient;

    }

    /**

    * 下载ObsObject

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param filePath 需要下载的文件路径。 例:"site/a.txt"

    * @return 下载文件的字节数组

    * @throws IOException

    */

    public byte[] getFileByteArray(String bucketName, String filePath) throws IOException {

    ObsObject obsObject = getObsClient().getObject(bucketName, filePath);

    InputStream input = obsObject.getObjectContent();

    byte[] b = new byte[1024];

    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    int len;

    while ((len = input.read(b)) != -1){

    bos.write(b, 0, len);

    }

    bos.close();

    input.close();

    return bos.toByteArray();

    }

    /**

    * 获取指定路径下的ObsObject数量

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param filePath 需要检索的文件夹路径 例:"site/"

    * @return 检索搜文件下的ObsObject的数量

    */

    public Integer getFolderObjectsSize(String bucketName, String filePath) {

    ListObjectsRequest request = new ListObjectsRequest(bucketName);

    if(filePath != null && (!filePath.trim().equals(""))){

    request.setPrefix(filePath);

    }

    ObjectListing result = getObsClient().listObjects(request);

    return new Integer(result.getObjects().size());

    }

    /**

    * 获取指定路径下的ObsObject

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param filePath 需要检索的文件夹路径

    * @return 路径下的所有的ObsObject,包括子文件夹下的ObsObject

    */

    public List getFolderObjects(String bucketName, String filePath) {

    List list = new ArrayList();

    ListObjectsRequest request = new ListObjectsRequest(bucketName);

    if(filePath != null && (!filePath.trim().equals(""))){

    request.setPrefix(filePath);

    }

    request.setMaxKeys(100);

    ObjectListing result;

    do{

    result = getObsClient().listObjects(request);

    for(ObsObject obsObject : result.getObjects()){

    list.add(obsObject);

    }

    request.setMarker(result.getNextMarker());

    }while(result.isTruncated());

    return list;

    }

    /**

    * 删除对象

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param fileName 需要删除的对象全名 例:"site/20190817/localFile.sh"

    * @return

    */

    public DeleteObjectResult deleteObject(String bucketName, String fileName) {

    return getObsClient().deleteObject(bucketName, fileName);

    }

    /**

    * 创建文件夹

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param fileName 新建文件夹的路径,总根路径开始,请务必以"/"结尾。例:"2019/0817/"

    * @return

    */

    public PutObjectResult mkdirFolder(String bucketName, String fileName) {

    return getObsClient().putObject(bucketName, fileName, new ByteArrayInputStream(new byte[0]));

    }

    /**

    * 通过流上传字符串为文件

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param fileName 上传的路径和文件名 例:"site/2010/example.txt"

    * @param content 上传的String字符

    * @param encode 进行转换byte时使用的编码格式 例:"UTF-8"

    * @return

    * @throws ObsException

    * @throws UnsupportedEncodingException

    */

    public PutObjectResult putStringFile(String bucketName, String fileName, String content, String encode) throws ObsException, UnsupportedEncodingException {

    return getObsClient().putObject(bucketName, fileName, new ByteArrayInputStream(content.getBytes(encode)));

    }

    /**

    * 上传文件本地文件

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param fileName 上传的路径和文件名 例:"site/2010/example.txt"

    * @param localFile 需要上传的文件

    * @return

    */

    public PutObjectResult putLocalFile(String bucketName, String fileName, File localFile) {

    return getObsClient().putObject(bucketName, fileName, localFile);

    }

    /**

    * 上传文件流

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param fileName 上传的路径和文件名 例:"site/2010/example.txt"

    * @param inputStream 上传文件的输入流

    * @return

    */

    public PutObjectResult putFileByStream(String bucketName, String fileName, InputStream inputStream) {

    return getObsClient().putObject(bucketName, fileName, inputStream);

    }

    /**

    * 通过流上传文件并设置指定文件属性

    * @param bucketName 操作的桶的名称 例:"wangmarket1232311"

    * @param fileName 上传的路径和文件名 例:"site/2010/example.txt"

    * @param inputStream 上传文件的输入流

    * @param metaData 上传文件的属性

    * @return

    */

    public PutObjectResult putFilebyInstreamAndMeta(String bucketName, String fileName, InputStream inputStream, ObjectMetadata metaData) {

    return getObsClient().putObject(bucketName, fileName, inputStream, metaData);

    }

    /**

    * OBS内对象复制

    * @param sourceBucketName 源文件的桶名称 例:"wangmarket1232311"

    * @param sourcePath 源文件的路径和文件名 例:"site/2010/example.txt"

    * @param destBucketName 目标文件的桶名称 例:"swangmarket34578345"

    * @param destPath 目标文件的路径和文件名 例:"site/2010/example_bak.txt"

    */

    public void copyObject(String sourceBucketName, String sourcePath,String destBucketName, String destPath) {

    getObsClient().copyObject(sourceBucketName, sourcePath, destBucketName, destPath);

    }

    /**

    * 获得原生OBSBucket的访问前缀

    * @return 桶原生的访问前缀,即不经过CDN加速的访问路径

    */

    public String getOriginalUrlForOBS() {

    return "//" + obsBucketName + "." + endpoint.substring(8, endpoint.length()) + "/";

    }

    /**

    * 通过bucket的名字和连接点信息获取bucket访问的url

    * @param bucketName 桶的名称 例:"wangmarket21345665"

    * @param endpoint 连接点的名称 例:"obs.cn-north-1"

    * @return 根据信息获得桶的访问路径 例:"//wangmarket21345665.obs.cn-north-1.myhuaweicloud.com/"

    */

    public String getUrlByBucketName(String bucketName, String endpoint) {

    String url = null;

    if (url == null || url.length() == 0) {

    url = "//" + bucketName + "." + endpoint + ".myhuaweicloud.com" + "/";

    }

    return url;

    }

    /**

    * 创建华为云ObsBucket,默认设置为标准存储,桶访问权限为公共读私有写,同策略为所有用户可读桶内对象和桶内对象版本信息

    * @param obsBucketName 创建桶的名称

    * @return 新创建的桶的名字

    */

    public String createOBSBucket(String obsBucketName) {

    // 将桶的名字进行保存

    this.obsBucketName = obsBucketName;

    ObsBucket obsBucket = new ObsBucket();

    obsBucket.setBucketName(obsBucketName);

    // 设置桶访问权限为公共读,默认是私有读写

    obsBucket.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ);

    // 设置桶的存储类型为标准存储

    obsBucket.setBucketStorageClass(StorageClassEnum.STANDARD);

    // 创建桶

    getObsClient().createBucket(obsBucket);

    //设置桶策略

    String json = "{"

    + "\"Statement\":["

    + "{"

    + "\"Sid\":\"为授权用户创建OBS使用的桶策略\","

    + "\"Principal\":{\"ID\" : \"*\"},"

    + "\"Effect\":\"Allow\","

    + "\"Action\":[\"GetObject\",\"GetObjectVersion\"],"

    + "\"Resource\": [\"" + obsBucketName + "/*\"]"

    + "}"

    + "]}";

    getObsClient().setBucketPolicy(obsBucketName, json);

    return obsBucketName;

    }

    /**

    * 获取当前的桶列表

    * @return 当前桶的列表信息

    */

    public List getBuckets() {

    return getObsClient().listBuckets();

    }

    /**

    * 关闭当前的使用的OBSClient

    */

    public void closeOBSClient() {

    if(getObsClient() != null){

    try {

    getObsClient().close();

    } catch (IOException e){

    e.printStackTrace();

    }

    }

    }

    /**

    * 返回当前的创建桶的名称 例:"wangmarket1232311"

    * @return 如果有桶,那么返回桶的名称,如 "wangmarket1232311" ,如果没有,则返回 null

    */

    public String getObsBucketName() {

    return this.obsBucketName;

    }

    /**

    * 返回当前的桶的访问路径 例:“ http://cdn.leimingyun.com/”

    * @return 若已经手动设置CDN路径返回为CND路径,反之则为OBS原始的访问路径

    */

    public String getUrl() {

    // 用户没有配置CDN,获的桶的原生访问路径

    if(url == null) {

    url = getOriginalUrlForOBS();

    }

    return url;

    }

    /**

    * 为对象设置公共读

    * @param objectKey

    */

    public HeaderResponse setObjectAclPubilcRead(String objectKey){

    return obsClient.setObjectAcl(obsBucketName, objectKey, AccessControlList.REST_CANNED_PUBLIC_READ);

    }

    /**

    * 获得下载路径

    * @param objectKey

    * @return

    */

    public String signatureUrl(String objectKey){

    long expireSeconds = 3600L;

    Map headers = new HashMap();

    String contentType = "text/plain";

    headers.put("Content-Type", contentType);

    TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.PUT, expireSeconds);

    request.setBucketName(obsBucketName);

    request.setObjectKey(objectKey);

    request.setHeaders(headers);

    TemporarySignatureResponse response = obsClient.createTemporarySignature(request);

    return response.getSignedUrl();

    }

    }

    3.OBS业务实现类:

    展开全文
  • 简介:将项目上所有的 图片、pdf文件、视频等上传到华为云 并获取到华为云的文件地址进行访问 准备工作 composer准备 1.composer.json里添加需要的require 并 composer update 2.如果要新增命名空间Obs 需要在 ...

    语言:php
    框架:laravel
    简介:将项目上所有的 图片、pdf文件、视频等上传到华为云 并获取到华为云的文件地址进行访问

    准备工作

    composer准备
    1.composer.json里添加需要的require 并 composer update
    2.如果要新增命名空间Obs 需要在 autoload 的 psr-4 里添加

    {
    	"name" : "obs/esdk-obs-php",
    	"description" : "OBS PHP SDK",
    	"license":"Apache-2.0",
    	"version":"3.20.5",
    	"require" : {
    		"php" : ">=5.6.0",
    		"guzzlehttp/guzzle" : "6.3.0",
    		"guzzlehttp/psr7" : "1.4.2",
    		"guzzlehttp/promises" : "1.3.1",
    		"psr/http-message" : "1.0.1",
    		"monolog/monolog" : "1.23.0",
    		"psr/log" : "~1.0"
    	},
    	
    	"keywords" :["obs", "php"],
    	"autoload": {
    		"psr-4": {
    			"Obs\\": "Obs/"
    		}
        }
    }
    

    下载SDK

    地址:https://developer.huaweicloud.com/sdk?OBS
    1.下载PHP示例 解压 得到Obs文件
    在这里插入图片描述
    2.将Obs、obs-autoloader.php 放到和app文件夹同级目录 如图:
    在这里插入图片描述

    创建上传控制器

    控制器名称:HuaWeiYunController.php

    <?php
    /**
     * 华为云上传图片
     */
    namespace App\Http\Controllers;
    
    use GuzzleHttp\Client;
    use Illuminate\Http\Request;
    use Obs\ObsClient;
    use Obs\ObsException;
    use GuzzleHttp\Exception\ClientException;
    
    require_once __DIR__.'/../../../obs-autoloader.php';
    
    class HuaWeiYunController extends Controller
    {
        public $obsClient;
        public $bucketName = 'bucket-uploads';//桶名字
        public $expires = 3600;
        public function __construct()
        {
            parent::__construct();
            $ak = config('obs.AK');//这里我放到配置文件里获取
            $sk = config('obs.SK');//这里我放到配置文件里获取
            // AK SK 获取方法:https://support.huaweicloud.com/qs-obs/obs_qs_0005.html
    
            $endpoint = '华为云桶的访问域名(这里使用IPv4地址):443';
            //华为云桶的访问域名 从创建的桶里获取 获取方法在文章结尾
    
            $this->obsClient = ObsClient::factory(array (
                'key' => $ak,
                'secret' => $sk,
                'endpoint' => $endpoint,
            ));
        }
    
        public function uploadImgAndFile(Request $request){
    
            $file = $request->file('file');
            //上传文件最大大小,单位M
            $maxSize = 20;
            //支持的上传文件类型
            $allowed_extensions = ["png", "jpg", "gif","pdf"];
            //返回信息json
            $data = ['code' => 200, 'msg' => '上传文件失败', 'data' => ''];
            if ($file->isValid()) {
                //检测文件类型
                $ext = $file->getClientOriginalExtension();
                if (!in_array(strtolower($ext), $allowed_extensions)) {
                    $data['msg'] = "请上传" . implode(",", $allowed_extensions) . "格式的文件";
                    return response()->json($data);
                }
                //检测文件大小
                if ($file->getClientSize() > $maxSize * 1024 * 1024) {
                    $data['msg'] = "文件大小限制" . $maxSize . "M";
                    return response()->json($data);
                }
            } else {
                $data['msg'] = $file->getErrorMessage();
                return response()->json($data);
            }
            $newFile = date('Ymd')."/" .time() .".".$file->getClientOriginalExtension();
            try {
                $resp = $this->obsClient->putObject([
                    'Bucket' => $this->bucketName,//桶名
                    'Key' => $newFile,// (文件路径1/文件路径2/文件名.文件后缀)
                    'Body' => fopen($file,'r'),
                    'ACL' => ObsClient::AclPublicRead,//设置对象访问权限为公共读
                ]);
                \Log::info('华为云-上传文件:'.print_r($resp,true));
                if($resp ['HttpStatusCode']==200){//$resp ['HttpStatusCode']状态码 200就是成功
                    $data = [
                        'code' => 0,
                        'msg' => '上传文件成功',
                        'url' => $resp ['ObjectURL'],//华为云上的文件地址
                        "data" => [
                            "src" => $resp ['ObjectURL']//华为云上的文件地址
                        ]
                    ];
                }else{
                    $data['data'] = $resp ['HttpStatusCode'].':'.$resp['Reason'];
                }
                return response()->json($data);
    
            } catch ( ObsException $e ) {
                \Log::info('华为云--上传文件错误信息:'.print_r($e,true));
                return response()->json($data);
            }
        }
        /**
         * 上传视频
         */
        public function uploadVideo(Request $request)
        {
            //支持的上传图片类型
            $allowed_extensions = ["mp4", "wmv", "wav"];
            //返回信息json
            $data = ['code' => 200, 'msg' => '视频上传失败', 'data' => ''];
            $file = $request->file('file');
            if ($file->isValid()) {
                //检测视频类型
                $ext = $file->getClientOriginalExtension();
                if (!in_array(strtolower($ext), $allowed_extensions)) {
                    $data['msg'] = "请上传" . implode(",", $allowed_extensions) . "格式的视频";
                    return response()->json($data);
                }
            } else {
                $data['msg'] = $file->getErrorMessage();
                return response()->json($data);
            }
            $newFile = date('Ymd')."/".time().".".$file->getClientOriginalExtension();
            try {
                $resp = $this->obsClient->putObject([
                    'Bucket' => $this->bucketName,//桶名
                    'Key' => $newFile,// 文件在桶里的路径
                    'Body' => fopen($file,'r'),
                    'ACL' => ObsClient::AclPublicRead,//设置对象访问权限为公共读
                ]);
                \Log::info('华为云-上传视频:'.print_r($resp,true));
                if($resp ['HttpStatusCode']==200){ //$resp ['HttpStatusCode']状态码 200就是成功
                    $data = [
                        'code' => 0,
                        'msg' => '上传成功',
                        'url' => $resp ['ObjectURL'],//华为云上的文件地址
                        "data" => [
                            "src" => $resp ['ObjectURL']//华为云上的文件地址
                        ]
                    ];
                } else {
                    $data['data'] = $file->getErrorMessage();
                }
            }catch ( ObsException $e ) {
                \Log::info('华为云--上传视频错误信息:'.print_r($e,true));
                return response([
                    'code' => 1,
                    'message' => '上传视频错误 请重新上传']);
            }
    
            return response()->json($data);
        }
    
    
    华为云-桶的-访问域名-获取

    1.在OBS管理控制台左侧导航栏选择“对象存储服务 OBS”。
    2.在桶列表单击待操作的桶,进入“概览”页面。
    3.在“概览”页面,查看“基本信息”。
    4.“基本信息” 下的 “访问域名”。

    得到的华为云上的文件地址如果访问不到 则需要配置匿名权限

    在这里插入图片描述

    展开全文
  • 之前使用华为云数据库其实主要是为了存储自己的图片,但后面发现如果用数据库存储图片的话将面临主要两个问题。       第一,数据库数据类型有限制,不方便我们操作,不够灵活,当我们想要再...
  • 摘要:作为公有的数据底座,大量的应用场景产生的数据都会存储到OBS对象存储服务中,如直播、电商、大数据可视化、机器学习、物联网等。其灵活的权限配置功能,能够解决如共享少部分数据或者数据全部托出等实际...
  • 下载obsfs软件包并安装#下载obsfs软件包wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsfs/current/obsfs_CentOS7.6_amd64.tar.gz#解压软件包到/usr/local/下tar xf obsfs_CentOS7.6_amd64.tar.gz...
  • Springboot集成华为云OBS

    千次阅读 2021-01-12 09:12:25
    Springboot实现华为云对象存储OBS文件上传下载 文章目录 Springboot实现华为云对象存储OBS文件上传下载 前言 一、OBS是什么? 二、使用步骤 1.引入依赖 2.HuaweiyunOss工具类 3.上传下载测试 总结 前言 OBS入门,...
  • 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。当上传大文件时,经常出现因网络不稳定或程序崩溃导致上传失败的...
  • 基于华为云OBS对象存储服务)Java SDK开发初探 1.安装SDK 1.1Maven配置 <dependency> <groupId>com.huaweicloud</groupId> <artifactId>esdk-obs-java</artifactId> <version...
  • 一、登陆华为云 https://www.huaweicloud.com/product/obs.html 二、进入控制台 三、创建桶 注意使用公共读否则别个访问不到 四、maven导入依赖 <dependency> <groupId>com.huaweicloud</...
  • 准备工作:申请服务器创建一个并行文件系统的桶下载AK/SK本文章笔者使用的是华为云上海一区4G16HCentOS7.4的ecs和上海一区名称为sunjianhui01的并行文件系统下的桶正式挂载:1、创建挂载目录mkdir /mnt/sunjianhui2、...
  • OBS对象存储服务(Object Storage Service),是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,包括:创建、修改、删除桶,上传、下载、删除对象等。 OBS系统和单个桶都没有...
  • java操作华为OBS对象存储服务器

    千次阅读 2019-11-19 19:20:39
    华为OBS对象存储 一.SDK概述 对象存储服务软件开发工具包(OBS SDK,Object Storage Service Software Development Kit)是对OBS服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用OBS SDK提供的...
  • JAVA:使用华为云存储OBS处理文件

    千次阅读 2021-04-09 14:27:12
    第一次使用华为云存储OBS处理文件,记录一下,用到OBS的功能不多,都是基础功能。 开始 一:购买OBS 华为云官网 直接从官网找到并选择合适的套餐购买就行。 二:yml配置 #华为云obs配置 obs: end-point: ...
  • 华为云对象存储OBS架构 华为云对象存储服务(Object Storage Service ,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 OBS的基本组成是桶和对象,其中对象是OBS中数据...
  • 据说华为云对象存储OMS服务的复制功能挺牛逼的,能够在线复制其他上的对象存储文件,体验一下效果如何。 对象存储适合存放非结构化数据,如图片、视频、文件等等。用文本文件测试一下效果。 【思路】 1、在腾讯...
  • SpringBoot 集成华为云对象存储服务OBS1. 登录华为云获取所需资料1. Access Key Id、Secret Access Key2. 桶名称、终端节点访问Endpoint、访问域名2. 导入依赖3. 创建工具类 对象存储服务OBS 1. 登录华为云获取所需...
  • tp5 华为云OBS对象存储

    2021-12-10 11:04:34
    项目场景:tp5 华为云OBS对象存储 官网下载SDK文件 extend 下放obs文件: @Override <?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/10/30 0030 * Time: 下午 1:07 */ namespace ...
  • 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。您可以通过ObsClient.listVersions列举多版本对象。该接口可设置的...
  • 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。您可以在上传对象时设置对象属性。对象属性包含对象长度、对象MIME...
  • 华为云OBS数据桶使用

    2021-08-27 18:43:14
    入门总览_对象存储服务 OBS_快速入门_华为云 (huaweicloud.com) 概览 OBS最基础的入门操作包括创建桶、上传对象和下载对象,通过这三个操作就能完成数据上传和下载。 图1为OBS大致的入门使用流程,实际上针对不同...
  • 华为云对象存储服务OBS是稳定、安全、高效、易用的存储服务,具备标准Restful API接口,可存储任意数量和形式的非结构化数据。静态网站托管是对象存储服务OBS面向静态网页内容提供的托管服务,可以帮助您快速构建...
  • S3接口访问华为云OBS

    千次阅读 2019-11-26 16:46:34
    S3接口访问华为云OBS 1.获取Access Key和Secret Key 创建了obs资源后,进入 我的凭证->访问密钥->新增访问密钥 Ps:只能创建两次密钥,一定要保存好!!! 2.Python接口访问 连接S3 主机名和auth_...
  • 华为云OBS对象存储服务,本文介绍了如何使用PicGo+华为云搭建图床,方便Typora使用图片上传。阿里和腾讯操作类型类似,可作为参考。 购买华为云OBS 购买链接:对象存储服务-控制台 (huaweicloud.com) 购买...
  • 华为云 - 公有产品 - OBS计费说明

    千次阅读 2020-09-13 21:58:39
    本小节主要介绍对象存储的计费说明,包括计费项、计费模式等。关于并行文件系统和专属对象存储的计费说明,请参考产品价格详情。 计费项 OBS计费项如图1所示,各计费项更加详细的说明请参见表1。 图1OBS计费项...
  • 本文来自客户使用CommVault备份软件备份到华为云对象存储的实践。使用CommVault备份软件的可以参考。备份到华为云的优势:公有可以天生充当客户的异地备份中心,省去客户自建异地备份中心的成本。华为OBS由于兼容...
  • spring boot 连接华为云 OBS

    千次阅读 2020-01-07 19:41:49
    1. 创建maven工程 ...2. pom.xml 添加 obs sdk <dependency> <groupId>com.huaweicloud</groupId> <artifactId>esdk-obs-java</artifactId> <version>3.0....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,509
精华内容 1,003
关键字:

华为云对象存储obs