質問

にDjango pythonのサーバー、カスタマイズしたURLのユーザにアップロード可能なファイルです。現在、問題は、私を成功できるファイルをアップロード時にブラウザがろうとした際に、その利用のカールできません。

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

私もいただきましたその他の変動がないよう働きます。その他にも、コマンドまたる"なcsrfトークンのエラー.にも挑戦しましたの除去 csrf token 応募形式 html filesetting.py があります。

私はすべて新しいカールとpythonです。を主な目的としたファイルのアップロードをpythonスクリプト思ったままでアップロードをカールして同じものをも再現可能で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-ヘッダーの対応(f13は新しいファイルを私が含まれません)

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

HTTP/1.1 200OK
日時:木,07Nov2013年23:19:18GMT サーバー:Apache/2.2.22(Ubuntu)
り:Accept-Encoding Content-Length:1263 Content-Type:text/html;charset=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

うまくいかない場合は、ヘッダーの応答を投稿してください。 -i ヘッダー応答を印刷するようにカールに指示します。

他のヒント

欠落しているCSRFトークンだと思います。

{% csrf_token %}

Django Docsをご覧ください クロスサイトリクエスト偽造保護。フォームが同じドメインから送信されるように生成されたトークンです。テンプレートからタグを削除することにより、CSRF保護を無効にすることができます。または試してみてください ここ カールを使用して渡す方法について。

ところで、あなたが望むのが私が使用することをお勧めするPythonスクリプトを使用してアップロードするだけであれば リクエスト.

url = 'http://wings.spectrumserver/sdm/lists'
files = {'file': open('file.ext', 'rb')}
r = requests.post(url, files=files)

私にsolvこのカール.

もしプログラムすることが可能ですpython3:

Djangoての保護クロスサイトを参照偽造(CSRF)

を使用する必要があり、CSRFクッキーの隠れたCSRFのです。

りにご利用いただけます最初のダウンロードページのようにブラウザ)の抽出CSRFsのポストを含むデータです。

のポストが必要にmultipart/form-data形式です。

一見方この形式は、Linuxマシン:

1-作Djangoアップロードのページにアクションポイント(例えば) http://127.0.0.1:2222/

2端末を実行す:nc-l127.0.0.1 2222&1|less

3-ブラウザをアップロードのページで、フォームに正しい情報をご入力も小さなテキストをアップロード、アップロードボタンを押します。のブラウザも問題ありません...

4つの端子につながりも見えてきます。ブラウザの投稿のファイルをポスト&multipart/データ形式

にimplemente解決:

5チェックのリンク http://blog.spotflux.com/uploading-files-python-3 でpython3後にmultipart/form-data形式です。

6-ただいており一部変更にこの例では、クッキーにします。

使用ます。パーサです。HTMLParser構文解析のHTMLページに表示されます。

この作品ができないのコードです。

なかった利用するようにしています。get()およびます。post().

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top