Я развернул flask на хостинге iis на сервере моей компании .. Я сделал настройку работы, но у меня была проблема в пост-запрос - PullRequest
0 голосов
/ 10 января 2020

Мне нужно отправить фотографию почтальоном на этот flask API, чтобы сделать ocr на нем, но всегда получаю ошибки, когда я отправляю почтовый запрос, когда я отправляю запрос на получение, он работает хорошо

import pytesseract   
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
from skimage import io
import numpy as np
from skimage.filters import threshold_otsu
from skimage.morphology import closing, square
import os
from flask import Flask, flash, request, redirect , url_for ,render_template
from werkzeug.utils import secure_filename
from cv2 import cv2 
import re

UPLOAD_FOLDER = "C:\inetpub\wwwroot\ocr"
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
app.secret_key = b'_5#y5L"F4Q8z\n\xec]/'

@app.route('/bar',methods=['GET', 'POST']) 
def bar(): 
        if request.method == 'POST': 
            # check if the post request has the file part 
            if 'file' not in request.files:  
                flash('No file part') 
                return ('nothing')#redirect(request.url) 
            file = request.files.get('file') 
            #file = request.files.get['file'] 
            # if user does not select file, browser also 
            # submit an empty part without filename 
            if file.filename == '': 
                flash('No selected file') 
                return ('no file name') 
            elif file and allowed_file(file.filename): 
                filename = secure_filename(file.filename) 
                filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) 
                file.save(filepath) 
                img = io.imread(filepath, as_gray = True)
                #img = cv2.imread(filepath) 
                result = ocr(img) 
                #file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
                #filepath = (os.path.join(app.config['imgdir'], filename)) 
                return (result) 
                #return ('okkkk') 
return ('hello') 
if __name__ == '__main__': 
    app.run(host='0.0.0.0',port=9010) 

всегда возвращаю 'ничто', даже если я отправил фотографию почтальоном, и когда я удаляю, если 'файл' не в

request.files:
flash('No file part')
return 'nothing'

я получаю сообщение об ошибке почтальона (500 внутренняя ошибка сервера), я думаю, что проблема в файле ( фото) не получено от почтальона на flask или, может быть, фото не принимается? у любого есть решение .. спасибо и это web.config:

 <configuration>
 <system.webServer>
   <handlers>
        <add name="FlaskHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python\python.exe|C:\inetpub\wwwroot\ocr\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python\python.exe|C:\inetpub\wwwroot\ocr\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
   </handlers>
    <httpErrors errorMode="Detailed" />
 </system.webServer>
 <appSettings>
   <!-- Required settings -->
   <add key="WSGI_HANDLER" value="app.app" />
   <add key="PYTHONPATH" value="C:\inetpub\wwwroot\ocr" />
 </appSettings>
 </configuration>

1 Ответ

0 голосов
/ 10 января 2020

У меня была похожая проблема при отправке файла от почтальона, но я отправлял файл и JSON данные вместе, но я начал использовать form-data в почтальоне, с которым я отправляю файл на сервер через POST и некоторые дополнительные данные в JSON, которые мне нужны.

Затем в моей конечной точке приложения flask я читаю это так:

request.files["file_name"]

Также , вы должны использовать secure_filename из werkzeug, чтобы сделать файл безопасным, например, from werkzeug import secure_filename

P убедитесь, что при вызове этого кода:

if 'file' not in request.files:  
    flash('No file part') 
    return ('nothing')  # redirect(request.url)

Что вы назвали свой файл в запросе file, если нет, то вы не можете найти его по этому ключу в словаре request, так как он не существует.

...