Μεταφόρτωση αρχείων στο διακομιστή Ubuntu χρησιμοποιώντας φιάλη αποτυγχάνει με 500 εσωτερικό σφάλμα διακομιστή

ψήφοι
36

Τρέχω μια εφαρμογή φιάλης σε ένα σύστημα Ubuntu 18.04 με Apache 2 και uWSGI. Όταν προσπαθώ να ανεβάσετε τα αρχεία σε έναν κατάλογο, αποτυγχάνει με κωδικό 500 σφάλμα. Το σενάριο είναι γραμμένο στο __init__.pyκαι βρίσκεται στη διεύθυνση: /var/www/FlaskApp/FlaskApp/__init__.py. Ο κατάλογος των αρχείων που έχουν αποσταλεί βρίσκεται στη διεύθυνση: /var/www/FlaskApp/FlaskApp/uploads. Το σενάριο μοιάζει ως εξής:

from flask import Flask, render_template, request, url_for, redirect, 
send_from_directory, send_file, flash
from werkzeug.utils import secure_filename
import os

UPLOAD_FOLDER = '/var/www/FlaskApp/FlaskApp/uploads'
#ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/test/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        #if 'file' not in request.files:
            #flash('No file part')
            #return redirect(request.url)
        file = request.files['file']
        #if file.filename == '':
            #flash('No selected file')
            #return redirect(request.url)
        #if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            #return redirect(url_for('uploaded_file',
                                    #filename=filename))
    return '''
    <!doctype html>
    <title>Upload new File</title>
    <h1>Upload new File</h1>
    <form method=post enctype=multipart/form-data>
      <input type=file name=file>
      <input type=submit value=Upload>
    </form>
    '''     


@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename)        

                            

if __name__ == '__main__':
    app.run()

Εμφανίζει τη σελίδα HTML, αλλά όταν κάνω κλικ υποβάλετε μετά την επιλογή των αρχείων, αποτυγχάνει. Έχω προσπαθήσει να τρέξει τον κώδικα με και χωρίς σχόλια, αλλά εξακολουθεί να αποτυγχάνει. Νομίζω ότι το σφάλμα παρουσιάζεται κατά τη: file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) Έχω επίσης δοκιμάσει πολλά διαφορετικά μονοπάτια. Θα μπορούσε να είναι κάτι λάθος με τη διαμόρφωση του app; Δεν νομίζω ότι έχω μια πραγματική settings.py, αν αυτό θα έχει σημασία.

Ευχαριστώ πολύ για τις απαντήσεις

Η φιάλη App Error-ημερολόγιο δείχνει αυτό:

 ERROR:flask.app:Exception on /test/ [POST], referer: http:the.servers.ip.adress/test/
 Traceback (most recent call last):, referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 2292, in wsgi_app, referer: http:the.servers.ip.adress/test/
response = self.full_dispatch_request(), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1815, in full_dispatch_request, referer: http:the.servers.ip.adress/test/
rv = self.handle_user_exception(e), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1718, in handle_user_exception, referer: http:the.servers.ip.adress/test/
reraise(exc_type, exc_value, tb), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/_compat.py, line 35, in reraise, referer: http:the.servers.ip.adress/test/
raise value, referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1813, in full_dispatch_request, referer: http:the.servers.ip.adress/test/
rv = self.dispatch_request(), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1799, in dispatch_request, referer: http:the.servers.ip.adress/test/
return self.view_functions[rule.endpoint](**req.view_args), referer: http:the.servers.ip.adress/test/
File /var/www/FlaskApp/FlaskApp/__init__.py, line 27, in upload_file, referer: http:the.servers.ip.adress/test/
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/werkzeug/datastructures.py, line 2725, in save, referer: http:the.servers.ip.adress/test/
dst = open(dst, 'wb'), referer: http:the.servers.ip.adress/test/

PermissionError: [Errno 13] Permission denied: '/var/www/FlaskApp/FlaskApp/uploads/an_image.jpg', referer: http:the.servers.ip.adress/test/
referer: http:the.servers.ip.adress/test/

ERROR:flask.app:Exception on /prov/ [POST], referer: http:the.servers.ip.adress/test/
Traceback (most recent call last):, referer: http:the.servers.ip.adress/test/
Δημοσιεύθηκε 26/02/2019 στις 21:34
χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Ok, βρήκα τη λύση. Όταν κλουβί ένα φάκελο μέσα στη φιάλη App, θα πρέπει να δώσει περισσότερα δικαιώματα από τις προεπιλογές. Στην περίπτωσή μου, χρησιμοποιώντας WinSCP, εγώ απλά κάνετε κλικ σε κάθε κουτί.

Απαντήθηκε 27/02/2019 στις 09:48
πηγή χρήστη

ψήφοι
0

i μόλις δοκιμάσετε τον κώδικα στο δικό μου λειτουργεί τέλεια βεβαιωθείτε ότι έχετε την άδεια να το φάκελο αποστολής σας απλά δώστε δικαίωμα εγγραφής σε αυτό και η διαδρομή πρέπει να είναι σωστό, δεν υπάρχει κανένα λάθος, εκτός από αυτό.

Απαντήθηκε 27/02/2019 στις 09:57
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more