0
votes

Autorisation de téléchargement de fichier Flask refusée

J'héberge une application Web sur mon serveur 8Ubuntu 18.04 utilisant Flask.

Le but de mon application est de télécharger une image (ou tout type de fichier pour le moment). Cependant, lorsque je tente de télécharger un fichier dans le dossier img, j'obtiens une erreur d'autorisation:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>HELLO</title>
</head>
<body>
<div>
   <h1>This is a test</h1>
   <form action="/" method="POST" enctype="multipart/form-data">
        <div>
            <input type="file" name = "image" id="image">
            <label for="image">Select Image</label>
        </div>
        <button type="submit">Upload</button>
    </form>
</div>
</body>
</html>

Je comprends donc qu'il y a une erreur d'autorisation. Comment est-il possible de résoudre ce problème?

Ma structure de fichiers est la suivante:

entrez la description de l'image ici

Mon code (python3) pour __init__.py est le suivant:

import os
from flask import Flask, flash, request, redirect, url_for, render_template

app = Flask(__name__)
app.config["IMAGE_UPLOADS"] = "/var/www/cloud/cloud/static/img/uploads"


@app.route("/", methods = ["GET", "POST"])
def upload_image():
    if request.method == "POST":
        if request.files:
            image = request.files["image"]
            print(image)
            image.save(os.path.join(app.config["IMAGE_UPLOADS"], image.filename))
            return "IMAGE SAVED"
    return render_template('upload-image.html')

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

et pour upload-image.html i est le suivant:

XXX

Je n'obtiens pas cette erreur quand il fonctionne localement mais uniquement lorsque je déploie t pour qu'il soit accessible sur les ordinateurs du même LAN que le mien.

Ceci est le tutoriel que je suis: https://www.youtube.com/watch?v=6WruncSoCdI


0 commentaires

3 Réponses :


0
votes

Donnez l'autorisation 777 au dossier du serveur sur lequel vous souhaitez télécharger des fichiers.


5 commentaires

Donc, dans le fichier var ou ne télécharge que le fichier?


Vers le fichier de téléchargement, pas le fichier var.


Ne conseillez jamais à personne de définir les autorisations sur 777, surtout pas aux débutants.


Pourquoi ? Ou avez-vous une autre option?. Je donne ce conseil car il n'a besoin que de télécharger un fichier et non un autre membre du personnel.


L'alternative consiste à définir des autorisations correctes. Afin de pouvoir donner des conseils détaillés, nous devons en savoir plus sur la configuration.



-1
votes

Voici l'erreur:

chmod 777 /var/www/cloud/cloud/static/img/uploads

C'est une erreur provenant du système d'exploitation, indiquant que vous n'avez pas l'autorisation de créer un fichier dans ce répertoire.

Maintenant, quand je dis "vous" n'avez pas la permission, je veux dire l'utilisateur qui exécute le processus. L'utilisateur qui dépend de la configuration du serveur.

Vous pouvez exécuter chown pour changer le propriétaire du répertoire, afin qu'il appartienne à l'utilisateur qui va y accéder, ou vous pouvez opter pour une option plus simple, qui est de permettre à tout le monde d'écrire dans ce répertoire, si le risque de sécurité ne vous dérange pas:

PermissionError: [Errno 13] Permission denied: '/var/www/cloud/cloud/static/img/uploads/3E5A33B5-7E19-461A-B0C5-6835080675E7.jpeg', referer: http://192.168.1.35/


5 commentaires

Ne modifiez jamais les autorisations en 777. Veuillez ne pas conseiller aux débutants de faire cela.


@ J.G. J'ai écrit "si le risque de sécurité ne vous dérange pas" et j'ai proposé une option différente avec chown .


Souhaitez-vous conseiller quelqu'un qui n'est pas capable de juger de la situation, de conduire une voiture sans freins? Je suis désolé. Un mauvais conseil reste un mauvais conseil. Mettre en danger le serveur n'est pas une solution de contournement acceptable. Je sais. Vous voulez seulement aider. Malheureusement, il n'y a pas de raccourci pour héberger une application Web sur votre propre serveur.


@ J.G. Veuillez vous abstenir de lancer des arguments et fournir une meilleure réponse si vous pensez que les arguments existants ne sont pas assez bons. Dire «ce n'est pas bon» à chaque solution proposée, sans en proposer une meilleure, n'aide personne.


J'ai déjà créé une réponse avant de commenter ici. Il n'y a pas grand chose à ajouter. Sans toutes les informations disponibles (utilisateur / groupe de processus, utilisateur / groupe de répertoire, permission de répertoire), il est impossible de donner une réponse spécifique. Nous devons attendre que @lolaa réponde à mes demandes. S'il vous plaît ne prenez pas cela personnel - cela n'a jamais été censé être. Configurer des serveurs Web et créer des applications Web est mon travail depuis les années 90. Cela ne veut certainement pas dire que je sais tout, mais peut-être en tenir compte théoriquement, je pourrais avoir raison. Tous mes vœux!



-2
votes

Vous devez ajuster les autorisations pour ce dossier.

Cela peut être fait avec une combinaison de chmod pour définir les autorisations et de chown pour changer le propriétaire / groupe du dossier.

Si vous ne parvenez pas à résoudre ce problème vous-même, veuillez nous indiquer les autorisations / la propriété actuelles.

Et vous devez également savoir quel utilisateur exécute votre application Flask.


2 commentaires

Si cette application sera disponible en ligne à l'avenir, que recommandez-vous de faire pour les autorisations?


Comme je l'ai écrit ci-dessus. Nous devons en savoir plus sur votre configuration.