java集成华为云obs上传下载实战
说明
最近项目上需要开发一个服务去和华为云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上传下载实战的更多相关文章
- JAVA Web 之 struts2文件上传下载演示(二)(转)
JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...
- JAVA Web 之 struts2文件上传下载演示(一)(转)
JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...
- FastDFS实现文件上传下载实战
正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...
- Java实现对文件的上传下载操作
通过servlet,实现对文件的上传功能 1.首先创建一个上传UploadHandleServlet ,代码如下: package me.gacl.web.controller; import jav ...
- Java使用 SFTP实现文件上传下载
package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...
- Java Web(十二) commons-fileupload上传下载
今天心态正常...继续努力.. --WH 一.上传原理和代码分析. 上传:我们把需要上传的资源,发送给服务器,在服务器上保存下来. 下载:下载某一个资源时,将服务器上的该资源发送给浏览器. 难点:服务 ...
- 基于tcp的云盘上传下载的模拟
老师的博客: server端 import json import struct import json import struct import socket import os sk = sock ...
- java 如何实现大文件上传下载(传输)各种格式
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
随机推荐
- [转帖]Run Grafana behind a reverse proxy
On this page Introduction Configure NGINX Configure HAProxy Configure IIS Configure Traefik Summary ...
- [转帖]TIDB - 使用BR工具进行数据热备份与恢复
一.BR工具 BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复.BR 只支持在 TiDB v3.1 及以上版本 ...
- [转帖]sendfile“零拷贝”、mmap内存映射、DMA
https://www.jianshu.com/p/7863667d5fa7 KAFKA推送消息用到了sendfile,落盘技术用到了mmap,DMA贯穿其中. 先说说零拷贝 零拷贝并不是不需要拷贝, ...
- vCenter 宕机后证书续期处理
vCenter 宕机后证书续期处理 背景 最近护网, 我司被选中作为防守方 因为发现一个vCenter控制台出现异常访问, 被管理员强行断网. 因为是周六的事情,当时自己也没太在意,想着工作日添加网络 ...
- [转帖]超线程 Smt 究竟可以快多少?
https://www.51cto.com/article/686171.html 刚才我们关闭SMT是把CPU10-CPU19全关了,只留下每对里面的1个CPU,也就是留下了CPU0-CPU9. 默 ...
- [转帖]Steam内存测试工具【转】
转自:https://www.cnblogs.com/iouwenbo/p/14377478.html Stream测试是内存测试中业界公认的内存带宽性能测试基准工具. Stream安装 官方源码 ...
- [转帖]gdb进阶调试技巧
https://www.jianshu.com/p/9bdaa0644dba 整理一下在linux下C/C++用gdb工具debug一些提高效率的操作.基本的gdb操作就不在这里赘述了. 打印各种变量 ...
- [转帖]CentOS8完美升级gcc版本方法
https://blog.whsir.com/post-6114.html 在CentOS8系统中,默认gcc版本已经是8.x.x版本,但是在一些场景中,还是需要高版本的gcc,网上一些作死的文章还在 ...
- [转帖]SPECjvm2008 User's Guide
SPECjvm2008 User's Guide https://spec.org/jvm2008/docs/UserGuide.html#UsePJA Version 1.0Last modifie ...
- API架构风格对比:SOAP vs REST vs GraphQL vs RPC
API架构风格对比:SOAP vs REST vs GraphQL vs RPC 最近一段时间关于GraphQL的讨论很多,一些项目中也相继用到了这种风格,但使用是否合理,是否存在杀鸡用牛刀这样的问题 ...