FileNotFoundError: [WinError 2] для метода POST в python - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь создать метод Flask POST для загрузки файла в мой s3 Bucket в python:

Вот код, который я пытаюсь сделать:

from flask import Flask, redirect, url_for,render_template, request, jsonify
import flask
import boto3
from flask_cors import CORS
import os
import pandas as pd

s3 = boto3.client('s3')
UPLOAD_FOLDER = 'path_folder'
app = flask.Flask(__name__)

app.config["DEBUG"] = False
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
CORS(app)

@app.route('/postsqlData/subsytem_upload/', methods=['POST'])
def upload_file():
    df = pd.DataFrame(os.listdir(UPLOAD_FOLDER),columns=['Paths'])
    bucket_name = "name"
    for i in range(len(df)):
       filename1 = str(df['Paths'].iloc[i])
       print(filename1)
       fileSize = os.path.getsize(filename1)
       print(fileSize)
       s3.upload_file(filename1, bucket_name,'test/{}'.format(filename1))

       print("Added")
     return "completeed"
app.run(host='0.0.0.0')

При этом выдается следующая ошибка:

Трассировка (последний последний вызов):
Файл "C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app .py ", строка 2446, в ответе wsgi_app = self.full_dispatch_request ()
Файл" C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py ", строка 1951, в full_dispatch_request rv = self.handle_user_exception (e)
Файл "C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask_cors \ extension.py", строка 161, в функции wrapped_function возвращает cors_after_request (app.make_response (f (* args, ** kwargs)))
Файл "C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py", строка 1820, в ререйзе handle_user_exception (exc_type, exc_value, tb)
Файл "C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask_compat.py", строка 39, в значении повышения рейза
Файл "C: \ Users \ admi n \ Anaconda3 \ lib \ site-packages \ flask \ app.py ", строка 1949, в full_dispatch_request rv = self.dispatch_request ()
Файл" C: \ Users \ admin \ Anaconda3 \ lib \ site-packages \ flask \ app.py ", строка 1935, в dispatch_request возвращает self.view_functionsrule.endpoint
Файл" s3_test.py ", строка 30, в upload_file
fileSize = os.path.getsize (filename1)
Файл "C: \ Users \ admin \ Anaconda3 \ lib \ genericpath.py", строка 50, в getize return os.stat (filename) .st_size
FileNotFoundError: [WinError 2] Системе не удается найти указанный файл : 'data.xlsx'

Если я запускаю этот код индивидуально, т.е. построчно. Скрипт успешно выполняется и загружает файлы в корзину s3. Но он не запускается, когда я использую почтовый метод. Как я могу решить это?

Заранее спасибо

1 Ответ

1 голос
/ 21 января 2020

os.listdir(UPLOAD_FOLDER) дает вам только имена файлов, но вам нужно

os.path.join(UPLOAD_FOLDER, filename1)

для доступа к файлу в папке UPLOAD_FOLDER

fileSize = os.path.getsize( os.path.join(UPLOAD_FOLDER, filename1) )

Кстати: вам не нужно dataframe, чтобы получить имена файлов, но вам может понадобиться full_path в upload_file()

   for filename1 in os.listdir(UPLOAD_FOLDER):
       print(filename1)

       full_path = os.path.join(UPLOAD_FOLDER, filename1)
       print(full_path)

       fileSize = os.path.getsize( full_path )
       print(fileSize)

       s3.upload_file( full_path , bucket_name,'test/{}'.format(filename1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...