3

画像をアップロードできるサーバーを落ち着かせようとしています.django-pistonを使用することで、情報を落ち着いて投稿、取得できますが、画像をアップロードする方法がわかりません。

4

4 に答える 4

0

あなたは確かにPOSTを行うことができます。ファイルはrequest.FILESで利用可能になります(ピストンはこれを邪魔しません)。

PUTを実行するには、x-method-overrideヘッダーをサポートするためにピストンにいくつかの変更を加える必要があります。それは私がフラッシュからPUTとDELを許可するために行うことです。(POSTを実行するときにヘッダーを追加して、PUTとして解釈されるようにすることを忘れないでください)

ミドルウェアの例を次に示します。

class x_http_methodoverride_middleware():
    def process_request(self, request):
        if 'HTTP_X_HTTP_METHODOVERRIDE' in request.META:
            newMethod = request.META['HTTP_X_HTTP_METHODOVERRIDE']
            if 'PUT' == newMethod.upper():
                request.method = 'PUT'
                request.META['REQUEST_METHOD'] = 'PUT'
                request.PUT = request.POST                
            if 'DELETE' == newMethod.upper() or 'DEL' == newMethod.upper():
                request.method = 'DELETE'
                request.META['REQUEST_METHOD'] = 'DELETE'
                request.DELETE = request.POST

(コードはここのオープンピストンチケットからのものですhttp://bitbucket.org/jespern/django-piston/issue/83/use-x-http-method-override-to-override-put

于 2010-11-07T04:42:06.507 に答える
0

かなり。

技術的には、それは単なる http 投稿です。

于 2010-11-05T14:56:17.753 に答える
0

ここで 2 つの回答を見つけることができます

1 つの方法は、request.FILES を使用してファイル名を取得し、画像を保存することです。

def create(self, request, nickname): 
    name = request.FILES["image"].name 
    image = PIL.Image.open(request.FILES["image"]) 
    image.save(SOME_PATH+name) 
    return rc.ALL_OK 

2 番目の提案は、Image モデルと ImageForm フォームを定義し、それらを使用することです。

def create(self, request, nickname):
    form = ImageForm(request.POST, request.FILES)
    if form.is_valid():
        Image.objects.create(image=form.cleaned_data['image'])
        return rc.ALL_OK
    return rc.BAD_REQUEST

警告: 私はこれらの方法のいずれもテストしていません!

于 2010-11-18T16:12:49.807 に答える
0

一方では、はい。画像データがある場合は、それを処理する方法を知っているハンドラーにポスト経由で送信できます。正しく行うと、理論的には、ハンドラーの request.FILES で使用できるようになります。単純な HTTP。

一方、いいえ。このような AJAX アップロードを行うには、ユーザーが実際にフォームを送信することなく、何らかの方法で画像データを取得する必要があります。これが、「ajax アップロード フォーム」の実装が非常に難しく、通常、隠し iframe などのトリックを使用して処理を行う理由です。

私の知る限りでは、File オブジェクトのgetAsBinary() メソッドを介して、ファイル フィールドのバイナリ コンテンツにこの種のアクセスを許可するのは、Firefox とその gecko だけです。

于 2010-11-07T03:23:40.477 に答える