轻松上云:使用Python与阿里云OSS实现文件上传

news2024/11/25 14:47:58

轻松上云:使用Python与阿里云OSS实现文件上传

​ 在数字化时代,数据的存储和管理变得越来越重要。阿里云对象存储服务(OSS)提供了一种高效、安全的方式来存储和访问各种类型的文件。本文将介绍如何利用Python编程语言结合阿里云OSS API来创建一个简单的桌面应用程序,该程序允许用户选择本地文件并通过图形界面直接上传到云端。

一、环境准备

要开始这个项目,你需要首先确保安装了Python开发环境,并且已经注册了阿里云账号以及开通了OSS服务。此外,还需要安装oss2库,这是阿里云官方提供的用于操作OSS的Python SDK。可以通过pip命令快速安装:

pip install oss2

同时,对于本示例中使用的GUI框架tkinter,它通常已包含在标准的Python发行版内,因此无需额外安装。

二、配置信息设置

在编写代码之前,请先准备好您的Access Key ID和Access Key Secret,这两个值是您访问阿里云API时的身份验证凭据。接着,在项目的根目录下创建一个名为config.ini的文件,内容如下所示:

[configName]
alibaba_cloud_access_key_id = your_access_key_id
alibaba_cloud_access_key_secret = your_access_key_secret

请将上述模板中的占位符替换为您自己的实际值。

三、构建用户界面及功能逻辑

我们的应用主要由两部分组成:一是让用户能够浏览并选择想要上传的文件;二是执行实际的文件上传动作。这里我们采用了Python自带的tkinter库来构建图形界面。

  1. 初始化配置:读取配置文件获取必要的认证信息,并初始化OSS客户端。
  2. 文件选择功能:通过filedialog.askopenfilenames()方法打开系统文件对话框供用户选择文件。
  3. 文件上传过程:
    • 检查是否有待上传文件。
    • 对于每一个选定的文件,调用bucket.put_object()方法将其上传至指定的OSS Bucket中。
    • 根据上传结果更新状态显示区,成功则以绿色字体提示,失败则以红色字体显示错误详情。

完整的代码已经在开头给出,它不仅实现了基本的功能需求,还注重用户体验,如提供了颜色编码的状态反馈等细节设计。

代码如下:

# -*- coding: utf-8 -*-
import oss2
import os
import configparser
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter.scrolledtext import ScrolledText

# 读取配置文件
config = configparser.ConfigParser()
config.read('config.ini')

# 从配置文件中获取Access Key ID和Access Key Secret
access_key_id = config.get('configName', 'alibaba_cloud_access_key_id')
access_key_secret = config.get('configName', 'alibaba_cloud_access_key_secret')

# 使用获取的RAM用户的访问密钥配置访问凭证
auth = oss2.AuthV4(access_key_id, access_key_secret)

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# yourBucketName填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "your bucket name", region=region)

# 选择文件函数,用于将选定的文件路径添加到列表框中
def select_files():
    """
    弹出文件选择对话框,让用户选择多个文件。
    
    用户选择的文件路径将被插入到 file_list 列表中,
    如果用户选择了文件,则先清空 file_list,再添加新的文件路径。
    """
    files_selected = filedialog.askopenfilenames()
    if files_selected:
        file_list.delete(0, tk.END)
        for file_path in files_selected:
            file_list.insert(tk.END, file_path)
            
# 上传文件函数,用于将列表框中的文件上传到OSS
def upload_files():
    """
    上传文件函数。
    
    此函数检查文件列表是否为空,如果为空则显示警告消息。
    如果文件列表不为空,则遍历文件列表,打开每个文件,并尝试将其上传到指定的存储桶。
    成功上传的文件将在状态文本框中显示成功消息,失败的文件将显示错误消息。
    所有文件上传完成后,显示提示消息。
    """
    # 检查文件列表是否为空
    if file_list.size() == 0:
        messagebox.showwarning("警告", "没有选择上传文件")
        return

    # 遍历文件列表,上传每个文件
    for i in range(file_list.size()):
        file_path = file_list.get(i)
        with open(file_path, 'rb') as fileobj:
            object_name = os.path.basename(file_path)
            try:
                # 尝试将文件上传到存储桶
                bucket.put_object(object_name, fileobj)
                # 更新状态文本框,显示成功消息
                status_text.insert(tk.END, f"文件 {object_name} 上传成功\n", 'green')
                status_text.see(tk.END)  # 自动滚动到底部
            except Exception as e:
                # 更新状态文本框,显示失败消息
                status_text.insert(tk.END, f"文件 {object_name} 上传失败: {e}\n", 'red')
                status_text.see(tk.END)  # 自动滚动到底部
    # 所有文件上传完成后,显示提示消息
    messagebox.showinfo("提示", "所有文件上传完成")
# 创建主窗口
root = tk.Tk()
root.title("OSS 文件上传工具")

# 创建并放置文件列表框
file_list = tk.Listbox(root, width=80, height=10)
file_list.pack(pady=10)

# 创建并放置选择文件按钮
select_button = tk.Button(root, text="选择文件", command=select_files, background="#FF00DD", foreground="#00FF00")
select_button.pack(pady=10)

# 创建并放置状态文本框
status_text = ScrolledText(root, width=100, height=10, wrap=tk.WORD, bg='black', fg='green', insertbackground='white')
status_text.tag_config('green', foreground='green')
status_text.tag_config('red', foreground='red')
status_text.pack(pady=10)

# 创建并放置上传文件按钮
upload_button = tk.Button(root, text="上传文件", command=upload_files, background="#FF00DD", foreground="#00FF00")
upload_button.pack(pady=10)

# 运行主循环
root.mainloop()

运行效果如下图:

在这里插入图片描述

在这里插入图片描述

四、运行测试

完成所有准备工作后,只需运行主脚本即可启动应用。按照界面上的操作指引选择文件并点击“上传”按钮,稍作等待便能看到处理结果。如果一切正常,你的文件就已经被安全地存放在阿里云上了!

通过这样一个简单但实用的例子,我们可以看到利用阿里云OSS进行文件管理是多么方便快捷。无论你是个人开发者还是企业IT部门的一员,掌握这些技术都能为日常工作带来极大便利。希望这篇文章能帮助你开启云计算之旅!

欢迎大家体验、试用阿里云百炼大模型和阿里云服务产品,链接如下:

阿里云百炼大模型

https://bailian.console.aliyun.com/

通义灵码_智能编码助手面向用户上线个人和企业版产品

https://tongyi.aliyun.com/lingma/pricing?userCode=jl9als0w

云工开物_阿里云高校计划助力高校科研与教育加速。

https://university.aliyun.com/mobile?userCode=jl9als0w

无影云电脑个人版简单易用、安全高效的云上桌面服务

https://www.aliyun.com/product/wuying/gws/personal_edition?userCode=jl9als0w

云服务器ECS省钱攻略五种权益,限时发放,不容错过

https://www.aliyun.com/daily-act/ecs/ecs_trial_benefits?userCode=jl9als0w

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过包控制->获取包重新获取之后,需求类型列表不对

龙勤思(2017年11月27日): 这个类型列表,我在把需求包提交到svn,再新建一个eap,通过包控制->获取包重新获取之后,就变成默认的如下列表了。我从你的原始的eap导出参考数据,再导入到新建的eap&#xff0c…

python+pptx:(三)添加统计图、删除指定页

目录 统计图 删除PPT页 from pptx import Presentation from pptx.util import Cm, Inches, Mm, Pt from pptx.dml.color import RGBColor from pptx.chart.data import ChartData from pptx.enum.chart import XL_CHART_TYPE, XL_LABEL_POSITION, XL_DATA_LABEL_POSITIONfil…

基础概念理解

一,数据结构分类 连续结构,跳转结构。 二,对变量的理解 在 C 语言中,变量是用于存储数据的抽象符号。变量本质上是一块内存区域的标识符(即它代表内存中的某一块区域),用来存储数据&#xff…

【微服务】不同微服务之间用户信息的获取和传递方案

如何才能在每个微服务中都拿到用户信息?如何在微服务之间传递用户信息? 文章目录 概述利用微服务网关做登录校验网关转微服务获取用户信息openFeign传递微服务之间的用户信息 概述 要在每个微服务中获取用户信息,可以采用以下几种方法&#…

5G NR:各物理信道的DMRS配置

DMRS简介 在5G中,DMRS(DeModulation Reference Signal)广泛存在于各个重要的物理信道当中,如下行的PBCH,PDCCH和PDSCH,以及上行的PUCCH和PUSCH。其最为重要的作用就是相干解调(Coherence Demodu…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结…

「QT」几何数据类 之 QRectF 浮点型矩形类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

2024双十一有什么是宝妈们值得入手的?双十一母婴必买清单

随着双十一购物狂欢节的临近,宝妈们纷纷开始筹备为家庭增添新的宝贝。作为一年一度的大型促销活动,双十一不仅提供了各种优惠,更是宝妈们囤货的好时机。2024双十一有什么是宝妈们值得入手的?在这个特殊的日子里,母婴产…

VMware Fusion和centos 8的安装

资源 本文用到的文件:centos8镜像 , VMware 软件包 , Termius 文件链接: https://pan.baidu.com/s/1kOES_ZJ8NGN-BnJl6NC7Sg?pwd63ct 安装虚拟机 先 安装 vmware ,然后打开,将下载的 iso 镜像拖入 拖入镜像文件iso Continue, 然后随便选…

返回对象的唯一标识符通常是对象的内存地址id(对象或变量)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 返回对象的唯一标识符 通常是对象的内存地址 id(对象或变量) [太阳]选择题 根据题目代码,执行的结果是? a [1, 2, 3] b a c a.copy() print("【显示】id(a) &…

SAP ABAP开发学习——WDA 四

目录 页面技术的发展 WebDynpro Layout控件 Layout的组件结构 布局方式 流式布局FlowLayout ​编辑 行布局RowLayout 矩阵布局MatrixLayout 网格布局GridLayout 数据绑定 在屏幕上显示数据 数据的双向传输 通过数据绑定控制UI显示 属性节点类型 属性的数据类型 …

速度快还看巡飞,筒射巡飞无人机技术详解

筒射巡飞无人机(Launch and Recovery by Tube,LRAT或Launcher-Deployed Loitering Munition,LDLM)作为一种新型无人机系统,近年来在军事和民用领域都展现出了巨大的潜力。以下是对筒射巡飞无人机技术的详细解析&#x…

想要监控办公电脑?那款电脑监控软件最好

在现代企业中,电脑监控已经成为了一项不可或缺的管理工具,尤其是对那些有多个部门和员工的公司。良好的电脑监控软件不仅能够帮助管理者了解员工的工作情况,还能提高工作效率、防止内部信息泄露以及保障公司数据安全。市场上有不少监控软件&a…

Elasticsearch(三):Elasticvue使用及DSL执行新增、查询操作

Elasticvue使用及DSL执行CURD 1 概述2 什么是Elasticsearch DSL3 基本结构4 客户端工具介绍4.1 索引介绍4.2 创建简单索引4.3 创建相对完整的索引4.4 插入数据4.4.1 基本插入操作4.4.2 批量插入操作 5 常用的DSL查询类型5.1 match查询5.1.1 match工作原理5.1.2 operator 参数5.…

zynq pl设计中断问题

问题 逻辑工程师vivado工具生成的pl hdf文件后,通过xilinx的工具解析的的dts文件,会出现中断号异常的问题。 原始问题肯定是硬件表现为通讯异常,此处以网口为例,则网口不通。 网口查询 uboot下网口信息 如下命令查询到 两个mac下对应的phy,地址分别为4和6,和硬件设计一…

Hadoop(HDFS)

Hadoop是一个开源的分布式系统架构,旨在解决海量数据的存储和计算问题,Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)、MapReduce编程模型和YARN资源管理器,最近需求需要用到HDFS和YARN。 文章目录 HDFS优缺点HDFS的读写原理 常…

实在智能受邀出席柳州市智能终端及机器人产业发展合作大会

10 月 27 日至 28 日,由中共柳州市委员会与柳州市人民政府主办的2024柳州市智能终端及机器人产业发展合作大会在柳州莲花山庄隆重举行。大会充分整合各方资源,持续深化与柳州在重大战略规划、重大平台建设、重点产业培育等领域的合作。作为智能体行业的知…

100+SCI科研绘图系列教程(R和python)

科研绘图系列:箱线图加百分比点图展示组间差异-CSDN博客科研绘图系列:箱线图加蜜蜂图展示组间数据分布-CSDN博客科研绘图系列:小提琴图和双侧小提琴图展示组间差异-CSDN博客科研绘图系列:组间差异的STAMP图的ggplot2实现-CSDN博客…

【WRF模拟】全过程总结:WPS预处理及WRF运行

【WRF模拟】全过程总结:WPS预处理及WRF运行 1 数据准备1.1 嵌套域设置(Customize domain)-基于QGis中gis4wrf插件1.2 静态地理数据1.2.1 叶面积指数LAI和植被覆盖度Fpar(月尺度)1.2.2 地面反照率(月尺度)1.2.3 土地利用类型+不透水面积1.2.4 数据处理:geotiff→tiff(W…

鸿蒙的进击之路

1. 题记: 为什么要写鸿蒙,因为她是华为的,为什么是华为就要写,因为华为背负了国人太多太多的包袱,或点赞或抨击。 我是强烈支持华为的,但我会客观公正地去评价华为的产品,就比如这篇博文&#…