说明

最近项目上需要开发一个服务去和华为云OBS集成获取一些业务上的文件,此处记录一下简单的java集成obs的入门,希望对大家快速入门有所帮助:)

实现效果

  • 上传对象
  • 下载到本地

操作步骤

1.开通obs

上华为云官网,注册账号后购买,支付后进入控制台。

2.获取ak/sk等信息

参考:
https://support.huaweicloud.com/eihealth_faq/eihealth_27_0007.html

3.获取官方java demo

https://github.com/huaweicloud/huaweicloud-sdk-java-obs/blob/master/app/src/test/java/samples_java
我这里拿的是:DownloadSample.java

/**
* This sample demonstrates how to download an object
* from OBS in different ways using the OBS SDK for Java.
*/
public class DownloadSample
{
private static final String endPoint = "https://obs.cn-east-3.myhuaweicloud.com"; private static final String ak = "替换"; private static final String sk = "替换"; private static ObsClient obsClient; private static String bucketName = "blogstore"; private static String objectKey = "stringdemo"; private static String localFilePath = "d:/temp/" + objectKey; public static void main(String[] args)
throws IOException
{
ObsConfiguration config = new ObsConfiguration();
config.setSocketTimeout(30000);
config.setConnectionTimeout(10000);
config.setEndPoint(endPoint);
try
{
/*
* Constructs a obs client instance with your account for accessing OBS
*/
obsClient = new ObsClient(ak, sk, config); /*
* Create bucket
*/
System.out.println("Create a new bucket for demo\n");
//obsClient.createBucket(bucketName); /*
* Upload an object to your bucket
*/
System.out.println("Uploading a new object to OBS from a file\n");
obsClient.putObject(bucketName, objectKey, createSampleFile()); System.out.println("Downloading an object\n"); /*
* Download the object as an inputstream and display it directly
*/
simpleDownload(); File localFile = new File(localFilePath);
if (!localFile.getParentFile().exists())
{
localFile.getParentFile().mkdirs();
} System.out.println("Downloading an object to file:" + localFilePath + "\n");
/*
* Download the object to a file
*/
downloadToLocalFile(); System.out.println("Deleting object " + objectKey + "\n");
//obsClient.deleteObject(bucketName, objectKey, null); }
catch (ObsException e)
{
System.out.println("Response Code: " + e.getResponseCode());
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getErrorRequestId());
System.out.println("Host ID: " + e.getErrorHostId());
}
finally
{
if (obsClient != null)
{
try
{
/*
* Close obs client
*/
obsClient.close();
}
catch (IOException e)
{
}
}
}
} private static void downloadToLocalFile()
throws ObsException, IOException
{
ObsObject obsObject = obsClient.getObject(bucketName, objectKey, null);
ReadableByteChannel rchannel = Channels.newChannel(obsObject.getObjectContent()); ByteBuffer buffer = ByteBuffer.allocate(4096);
WritableByteChannel wchannel = Channels.newChannel(new FileOutputStream(new File(localFilePath))); while (rchannel.read(buffer) != -1)
{
buffer.flip();
wchannel.write(buffer);
buffer.clear();
}
rchannel.close();
wchannel.close();
} private static void simpleDownload()
throws ObsException, IOException
{
ObsObject obsObject = obsClient.getObject(bucketName, objectKey, null);
displayTextInputStream(obsObject.getObjectContent());
} private static void displayTextInputStream(InputStream input)
throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
while (true)
{
String line = reader.readLine();
if (line == null)
break; System.out.println("\t" + line);
}
System.out.println(); reader.close();
} private static File createSampleFile()
throws IOException
{
File file = File.createTempFile("obs-java-sdk-", ".txt");
file.deleteOnExit();
Writer writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write("abcdefghijklmnopqrstuvwxyz\n");
writer.write("0123456789011234567890\n");
writer.close(); return file;
} }

4.运行demo

创建工程添加pom依赖:

<dependency>
<groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java-bundle</artifactId>
<version>[3.21.8,)</version>
</dependency>

修改样例代码中的配置项信息,运行。

常用链接

1.获取地区endpoint

https://developer.huaweicloud.com/endpoint

2.spingboot集成obs

https://www.dandelioncloud.cn/article/details/1389618552004751362

常见错误

1.endpoint地区不对

Response Code: 400

Error Message: The location constraint is incompatible for the region specific endpoint this request was sent to.

java集成华为云obs上传下载实战的更多相关文章

  1. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  2. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

  3. FastDFS实现文件上传下载实战

    正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...

  4. Java实现对文件的上传下载操作

    通过servlet,实现对文件的上传功能 1.首先创建一个上传UploadHandleServlet ,代码如下: package me.gacl.web.controller; import jav ...

  5. Java使用 SFTP实现文件上传下载

    package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...

  6. Java Web(十二) commons-fileupload上传下载

    今天心态正常...继续努力.. --WH 一.上传原理和代码分析. 上传:我们把需要上传的资源,发送给服务器,在服务器上保存下来. 下载:下载某一个资源时,将服务器上的该资源发送给浏览器. 难点:服务 ...

  7. 基于tcp的云盘上传下载的模拟

    老师的博客: server端 import json import struct import json import struct import socket import os sk = sock ...

  8. java 如何实现大文件上传下载(传输)各种格式

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  9. 2013第38周日Java文件上传下载收集思考

    2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...

  10. SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)

    SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...

随机推荐

  1. [转帖]Shell编程规范与变量

    目录 一.Shell的概念 Shell脚本的概念 Shell脚本应用场景 二.Shell的作用 Shell脚本种类 shell脚本的作用 Shell脚本的构成 Shell脚本的构成 二.编写Shell ...

  2. [转帖]Web技术(四):TLS 握手过程与性能优化(TLS 1.2与TLS 1.3对比)

    https://blog.csdn.net/m0_37621078/article/details/106126033?ops_request_misc=%257B%2522request%255Fi ...

  3. [转帖]3.3.8. KWR运行期对比报告 KWR DIFF

    https://help.kingbase.com.cn/v8/perfor/performance-optimization/performance-optimization-6.html#sys- ...

  4. 【转帖】纳尼,mysqldump导出的数据居然少了40万?

    0.导读 用mysqldump备份数据时,加上 -w 条件选项过滤部分数据,发现导出结果比实际少了40万,什么情况? 本文约1500字,阅读时间约5分钟. 1.问题 我的朋友小文前几天遇到一个怪事,他 ...

  5. 【JS 逆向百例】转变思路,少走弯路,X米加密分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:X米账号登 ...

  6. 基于go-restful实现的PoW算力池模型

    最开始知道区块链是在17年初,当时因为项目压力不大,开始研究比特币源码.对于比特币中提到的Proof of Work,当时只是一眼带过,并没有详细查看过相关的代码.在最近的项目中,考虑到性能的要求,需 ...

  7. 基于.net Core+EF Core项目的搭建(一)

    在我们要使用EF的项目中引用两个包Microsoft.EntityFrameworkCore.SqlServer和Microsoft.EntityFrameworkCore.Tools 我把要使用的E ...

  8. Unity2020或Unity2019安装后无法启动

    无法启动Unity 下载国际版的Unity2020,双击Unity.exe无法启动,通过Unity Hub也无法启动 ​ 原因 通过查看unity hub的日志发现Unity 启动的时候会检查 lie ...

  9. 窗口管理器 dwm安装

    上一篇博文中,已经完成了archlinux的安装,但是进去仅仅是一个冰冷冷的交互式命令窗口.没有图像,也无法打开浏览器.离日常使用还差的很远,接下来首先需要做的就是安装桌面环境.这里我不打算使用诸如g ...

  10. C++ CryptoPP使用AES加解密

    Crypto++ (CryptoPP) 是一个用于密码学和加密的 C++ 库.它是一个开源项目,提供了大量的密码学算法和功能,包括对称加密.非对称加密.哈希函数.消息认证码 (MAC).数字签名等.C ...