前端通过Python接口上传文件到阿里云OSS

本文介绍了如何在前端通过Python接口将文件上传到阿里云OSS。由于服务器带宽限制,作者选择使用OSS服务,并分享了使用Python编写上传接口的过程,以替代直接使用阿里云提供的JS SDK。文章提供代码示例并欢迎讨论。

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

最近在瞎折腾的时候,发现服务器带宽不够用了,本想升级一下带宽,但是看了看钱包还是算了,上OSS吧!所以就有了挖坑之路,,,

本文实现前端发送文件给服务器,由服务器上传到阿里云OSS,接口使用Python编写。阿里云官方也提供了JS直接上传的方法,但是为了练习一下Python,还是自己写接口吧 ,生命在于折腾  :)

先贴代码:

# -*- coding: utf-8 -*-
import json
import time
from flask import request
from flask import Flask
from flask_cors import CORS
import os
import shutil
import oss2

# 这些个 嘤嘤嘤 需要替换成自己的key,OSS控制台可以拿到
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '嘤嘤嘤')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '嘤嘤嘤')
bucket_name = os.getenv('OSS_TEST_BUCKET', '嘤嘤嘤')
endpoint = os.getenv('OSS_TEST_ENDPOINT', '嘤嘤嘤')

# 确认参数
for param in (access_key_id, access_key_secret, bucket_name, endpoint):
    assert '<' not in param, '请设置参数:' + param

# 创建Bucket对象
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)

# 接收文件
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
        # 上传文件到服务器
	fi
### 阿里云 OSS 直传 Python 实现方法 为了实现阿里云OSS直传功能,可以采用签名URL的方式让客户端直接向OSS上传文件。这种方式减少了服务器端的压力并提高了效率。 #### 创建签名URL 通过Python SDK生成带有临时授权的签名URL,允许前端或第三方应用直接上传文件至指定位置: ```python import oss2 from datetime import datetime, timedelta def create_upload_url(bucket_name, object_key): auth = oss2.Auth('your-access-key-id', 'your-access-key-secret') bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', bucket_name) expire_time = datetime.utcnow() + timedelta(seconds=3600) # 设置过期时间为1小时后 upload_url = bucket.sign_url('PUT', object_key, int(expire_time.timestamp())) return upload_url ``` 此函数会返回一个用于上传特定文件路径`object_key`的有效链接[^1]。 #### 前端发起请求 获得上述生成的URL之后,在HTML页面中可以通过JavaScript发送PUT请求完成实际的数据传输操作: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Upload File to Aliyun OSS</title> <script type="text/javascript"> function uploadFile(uploadUrl){ var fileInput = document.getElementById("file"); var file = fileInput.files[0]; fetch(uploadUrl, { method: "PUT", body: file, headers: {'Content-Type': ''} }).then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); } </script> </head> <body> <input id="file" type="file"/> <button onclick="uploadFile('THE_GENERATED_UPLOAD_URL')">Upload</button> </body> </html> ``` 这段代码展示了如何构建一个简单的网页表单让用户选择要上传文件,并调用之前获取到的上传接口[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值