Ne pas télécharger le fichier sur nginx avec l’aide du module de téléchargement

Dans mon projet, il y avait un problème. Ne pas télécharger le fichier. Voici mon code

config nginx

server{ listen 9000; server_name localhost; root /home/path/my/project; location ~ ^/(static|media)/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; } location /file-upload { internal; upload_pass /upload-file/; upload_store /home/payh/my/project/media/video; upload_max_file_size 250m; upload_set_form_field $upload_field_name.name "$upload_file_name"; upload_set_form_field $upload_field_name.content_type "$upload_content_type"; upload_set_form_field $upload_field_name.path "$upload_tmp_path"; upload_pass_form_field "^csrfmiddlewaretoken$"; upload_limit_rate 2m; track_uploads upload 1m; } location = /upload/progress { report_uploads upload; } location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_connect_timeout 10; proxy_read_timeout 10; proxy_pass http://localhost:8000/; } error_page 500 502 503 504 /media/50x.html; } 

La demande entre en fonction par nginx_accel après avoir cliqué sur le téléchargement du bouton. Ensuite, affichez la réponse pour nginx et envoyez-la. Nginx return 405 non autorisé. Je ne sais pas pourquoi. mes vues.py

 @login_required @csrf_protect def upload(request): context = RequestContext(request) if request.method == 'POST': pathfile = request.POST.get('upfile.path') upfile = open(pathfile, 'r') file = File(upfile) form = NewFileForm(request.POST, initial={'upfile':file}) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(upload)) else: form = NewFileForm() return render_to_response('upload.html', {'form':form}, context_instance=context) @login_required @csrf_protect def nginx_accel(request): if request.user.id == 1: file = request.FILES.get('upfile').name url = '/'.join(['/file-upload', file]) response = HttpResponse() response['Content-Type']= '' response['X-Accel-Redirect'] = url return response 

Nginx dans le navigateur renvoie “405 Non autorisé”. Quelqu’un peut-il dire pourquoi ce problème apparaît?

La cause de l’erreur est ce file = request.FILES.get('upfile').name . Il contournera et tentera de servir le fichier statique sur une requête POST, entraînant une erreur 405. Pour résoudre votre problème

 @login_required @csrf_protect def nginx_accel(request): if request.method == 'GET': if request.user.id == 1: file = request.GET.get('upfile').name url = '/'.join(['/file-upload', file]) response = HttpResponse() response['Content-Type']= '' response['X-Accel-Redirect'] = url return response 

essayer: supprimer ssortingng interne;
dans l’emplacement / téléchargement de fichier
Si une requête a une méthode autre que POST, le module renvoie l’erreur 405 (méthode non autorisée). Les demandes avec de telles méthodes pourraient être traitées dans un autre emplacement via la directive error_page. Plus d’informations