gpt4 book ai didi

django - 不要在上传模块的帮助下跨 nginx 上传文件

转载 作者:行者123 更新时间:2023-12-02 05:03:05 24 4
gpt4 key购买 nike

在我的项目中有一个问题。不要上传文件。这是我的代码

配置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;
}

点击按钮上传后通过nginx_accel请求进来的功能。然后查看 create response for nginx 并发送。 Nginx 返回 405 不允许。我不明白为什么。我的观点.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 返回“405 Not allowed”。谁能说说为什么会出现这个问题?

最佳答案

错误的原因是这个file = request.FILES.get('upfile').name。它将绕过并尝试在 POST 请求上提供静态文件,从而导致 405 错误。解决您的问题。

@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

关于django - 不要在上传模块的帮助下跨 nginx 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com