iShare's picture
Update main.py
0f2cd64
raw
history blame
2.95 kB
from fastapi import FastAPI, File, UploadFile, Request
from pydantic import BaseModel
from pathlib import Path
from fastapi import Form
from fastapi.responses import JSONResponse
from langchain.text_splitter import RecursiveCharacterTextSplitter
from PyPDF2 import PdfReader
from fastapi import Depends
#在FastAPI中,Depends()函数用于声明依赖项
import random
import string
import sys
import timeit
import datetime
import io
import os
from dotenv import load_dotenv
load_dotenv()
def generate_random_string(length):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(length))
app = FastAPI()
class FileToProcess(BaseModel):
uploaded_file: UploadFile = File(...)
@app.get("/")
async def home():
return "API Working!"
@app.post("/file/upload")
async def upload_file(username: str, file_to_process: FileToProcess = Depends()):
uploaded_file = file_to_process.uploaded_file
print("File received:"+uploaded_file.filename)
print("File received:", uploaded_file.filename)
print("File received: " + str(uploaded_file.filename))
username = request.query_params.get("username")
filename = request.query_params.get("filename")
print(username)
print(filename)
#print("File received:"+file_to_process.filename)
#`file_to_process`是`FileToProcess`类的一个实例,它具有一个名为`uploaded_file`的属性,而不是`filename`属性。
#因此,在打印`"File received:"+file_to_process.filename`时会引发`AttributeError`。
random_string = generate_random_string(20)
file_path = Path.cwd() / random_string
file_path.mkdir(parents=True, exist_ok=True)
file_saved_in_api = file_path / uploaded_file.filename
print(file_saved_in_api)
print(file_saved_in_api.resolve())
with open(file_saved_in_api, "wb+") as file_object:
file_object.write(uploaded_file.file.read())
text_splitter = RecursiveCharacterTextSplitter(
#separator = "\n",
chunk_size = 500,
chunk_overlap = 100, #striding over the text
length_function = len,
)
doc_reader = PdfReader(file_saved_in_api)
raw_text = ''
for i, page in enumerate(doc_reader.pages):
text = page.extract_text()
if text:
raw_text += text
temp_texts = text_splitter.split_text(raw_text)
print(temp_texts)
print()
#api_call_msg={"INFO": f"File '{uploaded_file.filename}' saved to your profile."}
api_call_msg={"INFO": f"File '{file_saved_in_api}' saved to your profile."}
print(api_call_msg)
print(api_call_msg["INFO"])
#File 'uploaded_file' saved to your profile.
print()
print(api_call_msg["INFO"].replace("uploaded_file", uploaded_file.filename))
print("API call finished...")
#return {"INFO": f"File '{uploaded_file.filename}' saved to your profile."}
return api_call_msg