自制云盘笔记 fastapi

nginx

client_max_body_size 10G;

fastapi

UPLOAD_DIRECTORY = r"G:\自制云盘" 你要保存的地址
TOKEN = '123n' 你的token

from fastapi import FastAPI, File, UploadFile, Header, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from typing import List
import os

from starlette.middleware.cors import CORSMiddleware

app = FastAPI()

# Directory to save the uploaded files
UPLOAD_DIRECTORY = r"G:\自制云盘"
TOKEN = '123n'

# 配置CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


# 验证token
def verify_token(token: str):
    if token != TOKEN:
        raise HTTPException(status_code=403, detail="Invalid token")



@app.post("/upload/")
async def upload_files(files: List[UploadFile], token: str = Header(...)):
    verify_token(token)  # 验证token

    if not files:
        raise HTTPException(status_code=400, detail="No files uploaded")

    for file in files:
        if file.size == 0:
            raise HTTPException(status_code=400, detail=f"File {file.filename} is empty")
        file_location = f"{UPLOAD_DIRECTORY}/{file.filename}"
        with open(file_location, "wb") as f:
            f.write(await file.read())

    return {"message": "Files uploaded successfully"}

html

你的服务器 改成自己的localhost或者内穿或者域名

<!DOCTYPE html>
<html>
<head>
    <title>Upload Multiple Files</title>
</head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<body>
    <h3>Upload Multiple Files</h3>
    <form id="upload-form" enctype="multipart/form-data" method="post">
        <label for="token-input">Token:</label>
        <input id="token-input" type="text" name="token" required>
        <br><br>
        <input name="files" type="file" multiple>
        <br><br>
        <input type="submit" value="Upload">
    </form>
    <progress id="progress-bar" value="0" max="100" style="width:100%;max-width: 300px;"></progress>
    <div id="status"></div>

    <script>
        document.getElementById('upload-form').onsubmit = function(event) {
            event.preventDefault();
            var form = event.target;
            var formData = new FormData(form);
            var token = document.getElementById('token-input').value;
            var progressBar = document.getElementById('progress-bar');
            var status = document.getElementById('status');

            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'http://你的服务器:8002/upload/', true);
            xhr.setRequestHeader('token', token);

            xhr.upload.onprogress = function(event) {
                if (event.lengthComputable) {
                    var percentComplete = (event.loaded / event.total) * 100;
                    progressBar.value = percentComplete;
                }
            };

            xhr.onload = function() {
                if (xhr.status == 200) {
                    status.innerHTML = 'Upload complete!';
                } else {
                    status.innerHTML = 'Upload failed: ' + xhr.statusText;
                }
            };

            xhr.onerror = function() {
                status.innerHTML = 'Upload failed: Network error';
            };

            xhr.send(formData);
        };
    </script>
</body>
</html>

uvicorn yunpan:app --reload --host 0.0.0.0 --port 8002

0.0.0.0外网监听


uvicorn yunpan:app --reload --host 0.0.0.0 --port 8002
gunicorn yunpan:app -c gunicorn_yunpan.py (windwos不行)
 

百度云盘提供了一系列的API来实现文件上传和下载功能。根据引用\[1\],在使用百度云盘API进行文件上传时,可以通过预上传接口来判断文件是否已经存在,以避免重复上传。预上传接口的返回类型应该是return_type=2。而根据引用\[3\],可以通过获取token来进行身份验证和授权,获取token的地址是https://openapi.baidu.com/oauth/2.0/authorize?response_type=token&client_id=L6g70tBRRIXLsY0Z3HwKqlRE&redirect_uri=oob&scope=netdisk。通过访问这个地址,可以从地址栏中获取到access_token。在上传文件时,可以使用curl命令来进行测试,具体的上传文件的API地址是https://c.pcs.baidu.com/rest/2.0/pcs/file?method=upload&access_token=23.c55ce5b45ca4b4b478a34aacbf78fb70.2592000.1451091550.1829018343-238347&path=/apps/pcstest_oauth/test/data.gz。更多关于百度云盘文件上传下载API的信息可以参考引用\[2\]和引用\[3\]提供的文档链接。 #### 引用[.reference_title] - *1* [百度云盘API文件上传参数详解](https://blog.csdn.net/xutianruo/article/details/100161516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [利用百度云盘API上传文件至百度云盘](https://blog.csdn.net/admans/article/details/80653490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值