aloqas-qa-fastapi / uploadFile.py
Samuel-DD's picture
Create uploadFile.py
df99d65 verified
raw
history blame
No virus
1.88 kB
import chardet
from fastapi import UploadFile, HTTPException
from io import BytesIO
from docx import Document
import fitz
async def file_to_text(file: UploadFile):
file_extension = file.filename.split('.')[-1].lower()
if file_extension == 'csv':
csv_data = await file.read()
encoding = chardet.detect(csv_data)['encoding']
try:
decoded_data = csv_data.decode(encoding)
return decoded_data
except UnicodeDecodeError:
raise HTTPException(status_code=400, detail="Le fichier CSV contient des caractères qui ne peuvent pas être décodés.")
# Fait
elif file_extension == 'json':
json_data = await file.read()
return json_data.decode()
# Fait
elif file_extension == 'docx':
doc_data = await file.read()
# Utilisez un flux mémoire pour passer les données au Document
doc_stream = BytesIO(doc_data)
doc = Document(doc_stream)
doc_text = [paragraph.text for paragraph in doc.paragraphs]
return '\n'.join(doc_text)
# Fait
elif file_extension == 'txt':
txt_data = await file.read()
return txt_data.decode()
# Fait
elif file_extension == 'pdf':
try:
pdf_data = await file.read()
# Chargez les données binaires dans un objet fitz.Document
pdf_document = fitz.open("pdf", pdf_data)
text = ''
# Extrait le texte de chaque page
for page in pdf_document:
text += page.get_text()
pdf_document.close()
return text
except Exception as e:
raise HTTPException(status_code=500, detail=f"Erreur de lecture du fichier PDF : {e}")
else:
return HTTPException(status_code=400, detail="Format de fichier non pris en charge")