基于Python和OSS的大文件上传助手

目录

1. 项目目标

2. 功能需求

(1)文件选择功能

(2)文件上传功能

(3)下载链接生成与显示

(4)界面布局与交互

3. 项目展示

4. 项目准备工作

(1)环境

(2)注册阿里云OSS

5. 代码


1. 项目目标

  • 实现一个基于 PyQt5 的图形用户界面应用程序,用于上传大文件到阿里云 OSS(对象存储服务)。
  • 提供用户友好的操作界面,简化文件上传流程。
  • 生成文件的下载链接,方便用户分享或下载已上传的文件。

2. 功能需求

(1)文件选择功能

  • 提供一个按钮,允许用户通过文件对话框选择要上传的文件。
  • 显示用户选择的文件路径。

(2)文件上传功能

  • 提供一个上传按钮,用户点击后,程序将选定的文件上传到指定的OSS bucket。

(3)下载链接生成与显示

  • 上传成功后,程序应生成文件的下载链接。
  • 在界面上显示可点击的下载链接,用户点击后可以直接访问或下载文件。

(4)界面布局与交互

  • 应用程序应具有简洁直观的界面布局。

3. 项目展示

选择要上传的文件

点击上传:

服务器端:

可以看见上传的英语.md

把链接复制到浏览器:

下载成功!现在遇到微信无法发送大文件的难题已经得到解决,无需再依赖微信、QQ或是云盘来分享大型文件。通过OSS服务器进行下载,下载速度将取决于你的网络带宽,通常情况下,从服务器下载文件的速度会非常快。

4. 项目准备工作

(1)环境

1️⃣ 操作系统:Windows 7以上
2️⃣ Python:3.8
3️⃣ IDE:Pycharm或vscode
4️⃣ 依赖:最新版的PyQt

(2)注册阿里云OSS

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

注册阿里云OSS,创建你的bucket

申请一个AccessKey

5. 代码

from PyQt5 import QtWidgets
from datetime import datetime
import oss2
import sys


class OSSClient:
    def __init__(self, accessKeyId, accessKeySecret, endpoint, bucketName):
        self.auth = oss2.Auth(accessKeyId, accessKeySecret)
        self.endpoint = endpoint
        self.bucketName = bucketName
        self.bucket = oss2.Bucket(self.auth, self.endpoint, self.bucketName)

    def upload_file(self, objectName, localFile):
        self.bucket.put_object_from_file(objectName, localFile)

    def generate_file_link(self, objectName):
        return f'http://{self.bucketName}.{self.endpoint}/{objectName}'


class UploadApp(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

        # 初始化 OSS 客户端
        self.oss_client = OSSClient(
            accessKeyId="你的KeyId",
            accessKeySecret="你的秘钥",
            endpoint="oss-cn-beijing.aliyuncs.com", #换成你的endpoint
            bucketName="你的bucket名字"
        )

    def initUI(self):
        self.setWindowTitle('OSS 文件上传')
        self.setGeometry(500, 500, 800, 400)

        # 布局
        layout = QtWidgets.QVBoxLayout()

        # 文件选择按钮
        self.select_file_btn = QtWidgets.QPushButton('选择文件', self)
        self.select_file_btn.clicked.connect(self.select_file)
        layout.addWidget(self.select_file_btn)

        # 显示文件路径
        self.file_path_label = QtWidgets.QLabel('未选择文件', self)
        layout.addWidget(self.file_path_label)

        # 上传按钮
        self.upload_btn = QtWidgets.QPushButton('上传文件', self)
        self.upload_btn.clicked.connect(self.upload_file)
        layout.addWidget(self.upload_btn)

        # 显示下载链接
        self.link_label = QtWidgets.QLabel('', self)
        self.link_label.setOpenExternalLinks(True)  # 使链接可点击
        layout.addWidget(self.link_label)

        self.setLayout(layout)

    def select_file(self):
        # 打开文件选择对话框
        options = QtWidgets.QFileDialog.Options()
        file_path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "选择文件", "", "All Files (*)", options=options)
        if file_path:
            self.file_path = file_path
            self.file_path_label.setText(f'文件路径: {file_path}')

    def upload_file(self):
        try:
            # 使用当前时间戳生成文件名,确保唯一
            object_name = f'{int(datetime.timestamp(datetime.now()))}_{self.file_path.split("/")[-1]}'
            self.oss_client.upload_file(object_name, self.file_path)
            file_link = self.oss_client.generate_file_link(object_name)

            # 在界面显示下载链接
            self.link_label.setText(f'<a href="{file_link}">下载链接: {file_link}</a>')
        except Exception as e:
            self.link_label.setText(f'上传失败: {e}')


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = UploadApp()
    mainWin.show()
    sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值