s3 api接口的调用

本文档记录了如何在Python和Java中调用S3 API进行文件存储操作,包括创建和删除bucket、上传和下载文件、列举bucket中的文件等。详细介绍了boto3库在Python中的使用方法,以及aws-java-sdk在Java中的API示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

最近公司使用s3做文件存储服务器,因此在程序中需要调用s3的api,目前程序中使用了python和java版本的s3的api,简单做下记录,方便以后使用。

一、s3 api使用python版

1.安装boto3的sdk

pip install boto3==1.4.7

2.创建s3的api客户端

import boto3
from botocore.client import Config
import os
import sys
import threading

#创建s3链接,如果s3服务器是第四代,则需要设置signature_version='s3v4'
s3_client = boto3.client('s3', endpoint_url='s3服务器地址',
                         aws_access_key_id='s3服务器的access_key_id',
                         aws_secret_access_key='s3服务器的secret_access_key',
                         region_name='s3服务器的时区,这里可以填写cn-north-1',
                         config=Config(signature_version='s3'))

3.获取s3中bucket列表

bucket_list = s3_client.list_buckets()

print bucket_list

4.创建bucket

bucket = s3_client.create_bucket(Bucket='bucket的名称')

print bucket

5.获取bucket信息
bucket_info = s3_client.head_bucket(Bucket='bucket的名称')

print bucket_info

6.删除bucket
#bucket_delete = s3_client.delete_bucket(Bucket='bucket的名称')

7.上传文件到s3服务器

# s3_client.upload_file("上传的源文件地址", "bucket名称", "上传文件在s3上对应的key名称", ExtraArgs={'ACL': 'public-read'})

或者

s3_client.upload_file("上传的源文件地址", "bucket名称", "上传文件在s3上对应的key名称",

      ExtraArgs={'ACL': 'public-read'},

      Callback=UploadProgressPercentage("上传的源文件地址"))
Callback属性对应的类方法如下,该类方法在控制台中打印了上传文件的进度

class UploadProgressPercentage(object):
    def __init__(self, filename):
        self._filename = filename
        self._size = float(os.path.getsize(filename))
        self._seen_so_far = 0
        self._lock = threading.Lock()
    def __call__(self, bytes_amount):
        # To simplify we'll assume this is hooked up
        # to a single filename.
        with self._lock:
            self._seen_so_far += bytes_amount
            percentage = (self._seen_so_far / self._size) * 100
            sys.stdout.write(
                "\r%s  %s / %s  (%.2f%%)" % (
                    self._filename, self._seen_so_far, self._size,
                    percentage))
            sys.stdout.flush()

8.获取bucket下文件列表

object_list = s3_client.list_objects(Bucket='bucket名称')
print object_list

9.查看bucket下的某个文件信息
object_info = s3_client.get_object(Bucket='bucket名称', Key='文件对应的key名称')
print object_info
10.删除文件
object_delete = s3_client.delete_object(Bucket='bucket名称', Key='文件对应的key名称')

11.下载文件

s3_client.download_file("bucket名称", "文件对应的key名称", "文件下载到的地址")

或者

s3client.download_file("bucket名称", "文件对应的key名称", "文件下载到的地址",Callback=DownloadProgressPercentage("文件下载到的地址"))

Callback属性对应的类方法如下,该类方法在控制台中打印了下载文件的进度

class _DownloadProgressPercentage(object):
    def __init__(self, filename):
        self._filename = filename
        self._seen_so_far = 0
        self._lock = threading.Lock()
    def __call__(self, bytes_amount):
        # To simplify we'll assume this is hooked up
        # to a single filename.
        with self._lock:
            self._seen_so_far += bytes_amount
            sys.stdout.write(
                "\r%s --> %s bytes transferred" % (
                    self._filename, self._seen_so_far))
            sys.stdout.flush()

 

参考文档

boto3 api官方文档:http://boto3.readthedocs.io/en/latest/guide/quickstart.html

1.s3的client的api

2.s3的client的api上传下载示例

二、3 api使用java版

1.在pom.xml中增加依赖包

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.7.3</version>
</dependency>

2.java中使用s3的api的demo

package org.jenkinsci.plugins.s3_step;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.

### 调用豆包API在ESP32-S3上的实现 为了实现在ESP32-S3上成功调用豆包API,需先完成一系列准备工作并编写相应的代码。 #### 准备工作 确保已安装Arduino IDE,并配置好用于编程ESP32-S3的支持环境。接着,在项目中引入必要的库文件来处理HTTP请求以及JSON解析等功能[^1]。 ```cpp #include <WiFi.h> #include <HTTPClient.h> #include <ArduinoJson.h> // JSON解析所需库 ``` #### 获取API Key 按照官方文档指示获取有效的API Key以便后续访问接口服务。此Key将在发起网络请求时作为认证参数传递给服务器端验证身份合法性。 #### 编写连接Wi-Fi函数 创建一个名为`connectToWifi()`的方法用来建立设备与无线路由器之间的通信链路: ```cpp void connectToWifi() { WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } } ``` #### 发起API请求方法 定义另一个称为`callDoubaoApi()`的过程负责构建URL字符串、设置头部信息(含Authorization字段)、发送GET/POST命令至指定地址并读取响应数据流返回结果对象供进一步分析使用。 ```cpp DynamicJsonDocument callDoubaoApi(const char* endpoint) { HTTPClient http; String url = "https://api.doubao.com/v1/" + String(endpoint); http.begin(url); http.addHeader("Content-Type", "application/json"); http.addHeader("Authorization", "Bearer YOUR_API_KEY"); int httpResponseCode = http.GET(); DynamicJsonDocument jsonBuffer(1024); if(httpResponseCode > 0){ DeserializationError error = deserializeJson(jsonBuffer, http.getString()); if(error){ Serial.println("Failed to parse response as JSON."); }else{ Serial.println("Successfully parsed JSON from API Response!"); } } else { Serial.printf("Error on sending GET: %d\n", httpResponseCode); } http.end(); return jsonBuffer; } ``` 请注意替换上述代码中的`YOUR_API_KEY`为实际取得的有效密钥值;同时调整目标路径以匹配具体要调用的服务接口名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值