Ошибка Axios при выполнении POST-запроса файла .txtPython

Программы на Python
Ответить
Anonymous
 Ошибка Axios при выполнении POST-запроса файла .txt

Сообщение Anonymous »

Я работаю над проектом с Flask и React, а точнее, сейчас я работаю над конечной точкой API, которая имеет утилиту для получения файла .txt из внешнего интерфейса, а затем запускает скрипт, анализирующий данные. из этого .txt и сохраняет графики, связанные с анализом.
Вот конечная точка API на серверной стороне:

Код: Выделить всё

@analysis_ns.route('/upload', methods=["POST", "GET"])
class ChatAnalysisUploadResource(Resource):
def get(self):
return {"message": "This endpoint is only for file uploads via POST."}, 405

#@jwt_required()
def post(self):
"""Upload a chat file, process it and return the image URLs"""
try:
if 'file' not in request.files:
abort(400, description="No file part")

file = request.files['file']

if file.filename == '':
abort(400, description="No selected file")

if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file_path = os.path.join(UPLOAD_FOLDER, filename)
file.save(file_path)

# Procesa el archivo y genera las imágenes
process_chat_file(file_path)

image_paths = ['static/mensajes_enviados.png', 'static/emojis.png']
missing_images = [path for path in image_paths if not os.path.exists(path)]

if missing_images:
abort(500, description=f"Imagen no encontrada: {missing_images}")

image_urls = {
'urls': [
url_for('static', filename='mensajes_enviados.png', _external=True),
url_for('static', filename='emojis.png', _external=True)
]
}

# Guardar los resultados en la base de datos
result_summary = ";".join(image_urls['urls'])
new_analysis = ChatAnalysisResults(
chat_name=filename,
result_summary=result_summary
)
new_analysis.save()

return jsonify(image_urls), 200

abort(400, description="File type not allowed")

# Captura el error y devuelve un mensaje serializable
except Exception as e:
return jsonify({"error": str(e)}), 500
А вот компонент React, который обрабатывает загрузку документа (я не очень хорошо умею реагировать):

Код: Выделить всё

import { useState } from 'react'
import PropTypes from 'prop-types'
import axios from 'axios'
import '../App.css'

function UploadForm({ setImages }) {
const [file, setFile] = useState(null);
const [response, setResponse] = useState('');
const [loading, setLoading] = useState(false);

const handleFileChange = (event) => {
setFile(event.target.files[0]);
};

const handleUpload = async () => {
if (!file) {
alert("Please select a chat file to upload.");
return;
}

const formData = new FormData()
formData.append('file', file) // Cambiado de 'chat_file' a 'file'

setLoading(true) // Inicia la animación de carga
setImages([])   // Limpia los resultados anteriores
setResponse('') // Opcional: limpia el mensaje de respuesta

console.log('Loading started');

try {
const response = await axios.post('http://127.0.0.1:8080/analysis/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});

console.log('Response data:', response.data);

setImages(response.data.urls);
setResponse('Chat file analyzed successfully');
} catch (error) {
console.error('Error uploading the file:', error);
setResponse('Error uploading the file: ' + (error.response ? error.response.data.error : error.message));
} finally {
setLoading(false); // Detiene la animación de carga independientemente del resultado
console.log('Loading finished');
}
}

return (



{loading ? 'Analyzing' : 'Analyze Chat'}

{response && {response}
}
{loading && (



)}

)
}

UploadForm.propTypes = {
setImages: PropTypes.func.isRequired,
}

export default UploadForm
И это ошибка, которую я получаю в консоли:
[img]https: //i.sstatic.net/70tnD5eK.png[/img]

Кроме того, ошибка, которую я вижу на терминале VSCode, следующая:

Код: Выделить всё

  File "/opt/anaconda3/lib/python3.11/json/encoder.py", line 180, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Response is not JSON serializable
Все конечные точки API до сих пор работают правильно, за исключением этой. Я застрял с этой проблемой уже неделю, и мне нужна помощь. Если вам нужна дополнительная информация или вы хотите увидеть больше частей/сценариев проекта, не стесняйтесь спрашивать :)

Подробнее здесь: https://stackoverflow.com/questions/790 ... a-txt-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»