gpt4 book ai didi

python - 使用curl将文件上传到django服务器

转载 作者:行者123 更新时间:2023-11-28 22:52:58 27 4
gpt4 key购买 nike

在 Django python 服务器上,我自定义了一个用户可以上传文件的 URL。现在,问题是当我点击浏览器时我能够成功上传文件但是当我使用 curl 尝试同样的事情时,我无法这样做。

views.py

import json

from django.http import HttpResponse
from django.template import Context, RequestContext
from django.shortcuts import render_to_response, get_object_or_404

# -*- coding: utf-8 -*-
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

from sdm.models import Document
from sdm.forms import DocumentForm

def lists(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile = request.FILES['docfile'])
newdoc.save()

# Redirect to the document list after POST
return HttpResponseRedirect(reverse('sdm:lists'))

else:
form = DocumentForm() # A empty, unbound form

# Load documents for the list page
documents = Document.objects.all()

# Render list page with the documents and the form
return render_to_response(
'sdm/lists.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)

........ ………… ………… …………

lists.html

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Minimal Django File Upload Example</title>
</head>
<body>
<!-- List of uploaded documents -->
{% if documents %}
<ul>
{% for document in documents %}
<li><a href="{{document.docfile.url }}">{{ document.docfile.name }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No documents.</p>
{% endif %}

<!-- Upload form. Note enctype attribute! -->
<form action="{% url sdm:lists %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{form.non_field_errors }}</p>
<p>{{form.docfile.label_tag }} {{form.docfile.help_text }}</p>
<p>
{{ form.docfile.errors }}
{{ form.docfile }}
</p>
<p><input type="submit" name="press" value="Upload" /></p>
</form>
</body>
</html>

在浏览器上

enter image description here

在终端上,我试过了

 $ curl --request PUT --upload-file filename http://wings.spectrumserver/sdm/lists

$ curl --form upload-file=filename --form press=Upload

http:// wings. spectrumserver/sdm/lists

$ curl --upload-file filename http://wings.spectrumserver/sdm/lists
$ curl --upload-file filename press=upload http://wings.spectrumserver/sdm/lists

$ curl -H 'Expect:' -F data=@filename -F submit=Upload wings.spectrumserver/sdm/lists

// In all cases, No error but no file upload

我尝试了一些其他变体,但似乎没有任何效果。我还尝试了一些其他命令,这些命令给出了“NO csrf token error”。我还尝试从 html 文件setting.py 中删除 csrf token 条目,但没有任何效果。

我对 curl 和 python 都是新手。主要目的是使用一些 python 脚本上传文件。我想如果我可以通过 curl 上传,那么同样的东西可以在带有 curl 库的 python 脚本中复制,所以如果这不起作用,那么任何人都可以建议一些 python 代码来将文件上传到这个服务器。

编辑:

$ curl -i -F name=press -F f13 wings.spectrumserver/sdm/lists
Warning: Illegally formatted input field!
curl: option -F: is badly used here
curl: try 'curl --help' or 'curl --manual' for more information

Edit2- Header Response(f13 是未包含的新文件)

$ curl -i http://wings.spectrumserver/sdm/lists

HTTP/1.1 200 正常
日期:2013 年 11 月 7 日星期四 23:19:18 GMT 服务器:Apache/2.2.22 (Ubuntu)
变化:接受编码 内容长度:1263 内容类型:文本/html;字符集=utf-8

最小 Django 文件上传示例

    <ul>

<li><a href="/media/documents/2013/10/28/templates.zip">documents/2013/10
/28/templates.zip</a></li>

<li><a href="/media/documents/2013/11/07/list">documents/2013/11/07/list</a>
</li>

<li><a href="/media/documents/2013/11/07/f1">documents/2013/11/07/f1</a></li>

<li><a href="/media/documents/2013/11/07/f12">documents/2013/11/07/f12</a></li>

<li><a href="/media/documents/2013/11/07/hello.html">documents/2013/11
/07/hello.html</a></li>

</ul>


<!-- Upload form. Note enctype attribute! -->
<form action="/sdm/lists" method="post" enctype="multipart/form-data">

<!--
--> <p></p>
<p><label for="id_docfile">Select a file</label> max. 42 megabytes</p>
<p>

<input type="file" name="docfile" id="id_docfile" />
</p>
<p><input type="submit" name="press" value="Upload" /></p>
</form>
</body>
</html>

最佳答案

尝试这样的事情:

curl -i --form docfile=@localfilename http://wings.spectrumserver/sdm/lists

如果不起作用,请发布您的 header 响应。 -i 告诉 curl 打印 header 响应。

关于python - 使用curl将文件上传到django服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848385/

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