Flask возвращает HTTP-код 0 при отправке файла - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть веб-приложение Flask, которое загружает изображения в модель машинного обучения и возвращает прогнозы в zip-файле.Для простоты код в этом примере просто загружает изображения и возвращает их в формате zip.Я также реализовал в html флеш-зону.

Это код ошибки, который я получаю при выполнении строки send_from_directory

"GET /horus/download HTTP/1.1" 0 

interface.html

<body>
    <h3>Welcome to Horus&trade; v1.0</h3>

{{ dropzone.create(action=url_for('predict')) }}
<button class="btn waves-effect waves-light btn-large" id="upload">Upload
    <i class="material-icons right">send</i>
</button>

{{ dropzone.load_js() }}
{{ dropzone.config(custom_options='addRemoveLinks: true,dictRemoveFileConfirmation:"Are you sure you want to remove this file?" ') }}
</body>
</html>

app.py

import base64
import zipfile
import json 
import requests
import os
from flask import Flask, request,jsonify,render_template,url_for,redirect,send_from_directory,current_app,send_file,after_this_request
from werkzeug import secure_filename
from keras.preprocessing import image
from lib.JsonToXML import convert

from flask_dropzone import Dropzone
from flask_cors import CORS, cross_origin



app = Flask(__name__)
CORS(app)
app.config['CORS_HEADERS']='Content-Type'
app.config.update(
        DROPZONE_ALLOWED_FILE_CUSTOM = True,
        DROPZONE_ALLOWED_FILE_TYPE = '.JPG,.JPEG,.jpg,.jpeg',
        DROPZONE_UPLOAD_ON_CLICK = True,
        DROPZONE_UPLOAD_MULTIPLE = True,
        DROPZONE_DEFAULT_MESSAGE = 'Drop files here to upload or click here to open File Explorer. Allowed file extensions: .jpg, .jpeg'
        )



dropzone = Dropzone(app)

@app.route('/horus/predict/v1', methods=['POST','GET'])

def predict():

    if request.method == 'POST': 


        for key,files in request.files.items():
         if key.startswith('file'):    
            print(files)
            files.save('output/'+ secure_filename(files.filename))


        return redirect(url_for('download'))
    else:
        return render_template('interface.html')

@app.route('/horus/download',methods=['GET'])
@cross_origin(origin='*')
def download():

    uploads = os.path.join(current_app.root_path,'output/')
    zfile = zipfile.ZipFile('output/Annotations.zip','w',zipfile.ZIP_DEFLATED)

    for xfile in os.listdir(uploads):
        if xfile.endswith('.jpg'):
            zfile.write('output/'+xfile)

    zfile.close()

    for files in os.listdir(uploads):
        if files.endswith('.zip')==False:
            os.remove(uploads+files)
            print(files + ' deleted.')

    return send_from_directory(uploads,'Annotations.zip',as_attachment=True)


if __name__ == '__main__':
    app.run('0.0.0.0',debug=True)

До этого я тестировал API с нормальной формой, и он работал просто отлично.Эта проблема произошла после того, как я реализовал колбу-дропзону.Я также пытался реализовать колбу, но результат тот же.В настоящее время я нахожусь в тупике, и любая помощь очень ценится.

...