J'essaie d'utiliser un package de stockage Django-privé pour protéger le fichier d'un modèle d'être consulté. Ou téléchargé par les utilisateurs qui ne sont pas propriétaires du fichier.
J'ai pu le faire avec succès dans le développement (utiliser Python Manage.py Runserver) P>
dans le développement, j'utilise nginx configuré via Docker. P>
Je peux créer des objets avec Filefield et PRIVÉFILEFIELD. Mon problème consiste à accéder aux URL associées à un fournisseur privatif. P>
Les médias sont servis comme prévu (par exemple, lorsque j'accède à l'URL d'un champ de fichier), mais je reçois une erreur "404 introuvable" de nginx quand J'accède à l'URL d'un fournisseur privé. P>
My Hunch est que la réponse du serveur n'est pas correctement configurée pour avoir une donnée "X-Accel-redirection", Traiter ainsi la réponse non interne. P>
Si je retire la ligne "interne;" Dans mon nginx.conf pour l'emplacement de données privées, le fichier privé est servi.
correctement, bien que, maintenant, ce n'est pas privé. p> aussi, je suis sûr que le fichier privé a été enregistré dans / home / app / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / web / private-data P> Suis je manque quelque chose dans la mise en œuvre? P> Merci d'avance. P> Info supplémentaire: P> nginx.conf strong> p> p>
@method_decorator(login_required, name='dispatch')
class DownloadPrivateFileView(PrivateStorageDetailView):
model = Message
model_file_field = 'private_attachment'
def can_access_file(self, private_file):
# When the object can be accessed, the file may be downloaded.
# This overrides PRIVATE_STORAGE_AUTH_FUNCTION
# grant_access checks private_file ownership
grant_access = grant_note_access(private_file.request, message=self.get_object())
return grant_access
3 Réponses :
IAM dans la phase de test avec cette bibliothèque aussi! P>
Je n'ai pas utilisé ces lignes indiquées, qui sert à accélérer le téléchargement de fichiers volumineux. P>
Sans ces paramètres et débogage = Faux, tout a fonctionné correctement. P>
Prenez le test s'il vous plaît. P>
Désolé pour la traduction, je ne parle pas anglais p>
"Je n'ai pas utilisé ces lignes indiquées, qui sert à accélérer le téléchargement de fichiers volumineux." Quelles lignes parlez-vous?
Lieu / Private-Data / {interne; # <------ Le privé est accessible si cette ligne est supprimée Alias / Home / App / Web / Private-Data /; }. Il peut avoir quelque chose à voir avec les paramètres Nginx. Ensuite, je poste mes paramètres pour que je puisse tester. Mon environnement: Nginx Server sur l'ordinateur exécutant Docker. Un conteneur Docker sur cet ordinateur avec l'application Django.
My Conf pour mon site à Nginx mySite.conf strong> mon paramètre.py strong> pour django: p> XXX PRE> urlpatterns += [
path('private-media/', include(private_storage.urls)),
]
Je viens de supprimer de n'oubliez pas de définir Ceci est mon nginx.conf code> Emplacement qui fait référence aux médias privés, comme:
débogu = faux , alors cela devrait fonctionner parfaitement. Chaque fois que j'ai essayé d'accéder aux médias privés sans vous connecter, il m'a redirigé de vous connecter à la page. P>
Params.py code> P>
from django.conf.urls.static import static
from django.conf.urls import url
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
import private_storage.urls <--- this is for private storage
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls')),
path('rubric/', include('rubric.urls')),
path('warehouse/', include('warehouse.urls')),
path('preoffers/', include('preoffers.urls')),
path('offers/', include('offers.urls')),
url('^privatefiles/', include(private_storage.urls)) <--- this is for private storage
]
if settings.DEBUG:
urlpatterns += static(
settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(
settings.STATIC_URL, document_root=settings.STATIC_ROOT)