2

フォーム内の複数のファイルをBlobStoreにアップロードしようとしています。複数のファイルをBlobStoreにアップロードする方法は?

フォーム:私は、アップロードされたファイルごとにBlobInfoオブジェクトを取得しようとしている

<form action="{{upload_url}}" method="POST" enctype="multipart/form-data"> 
    <label>Key Name</label><input type="text" name="key_name" size="50"><br/> 
    <label>name</label><input type="text" name="name" size="50"><br/> 
    <label>image</label><input type="file" name="image" size="50"><br/> 
    <label>thumb</label><input type="file" name="thumb" size="50"><br/> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

def post(self): 
    image_upload_files = self.get_uploads('image') 
    thumb_upload_files = self.get_uploads('thumb') 
    image_blob_info = image_upload_files[0] 
    thumb_blob_info = thumb_upload_files[0] 

私はいくつかの奇妙な行動を見ています。両方のファイルがBlobStoreに作成されていますが、キーを取得して別のエンティティに格納できるようにする方法がわかりません。上記のコードは、image_blob_infoのキーを取得しますが、thumb_blob_infoは取得しません。私はget_uploadsの使い方を理解していません。私はフォームを介して複数のファイルを渡して、名前でフェッチして、別のエンティティの適切なBlobReferencePropertiesに格納できるようにしたい。

+0

:それはあなたが{「GAE生成されたURL」URL}として戻ってサーバーからJSONのビットを取得を前提としています。アップロードするファイルがn個ある場合は、Karlが参照する解決策があります(ただし、実装するのは簡単ではありません)。 –

+1

サムネイルをアップロードするようユーザーに求めている理由はありますか? get_serving_urlを知っていますか?フルサイズの画像からサムネイルを生成できますか? –

+0

これはBlobStoreがフォームPOSTのみをサポートしていることを回避するための管理ページです(あなたはプログラム的にURLを保存することはできません)。それを言って、私はget_serving_urlについて知らなかった。それはBlobStoreの一部ですか? –

答えて

5

各ファイルには独自のアップロードURLが必要なので、3つのファイルがすべて同じURLに投稿されたときに不思議なことになります。

複数のファイルのアップロードをサポートするための最善の解決策は、ニック・ジョンソンのブログ記事で説明されています

http://blog.notdot.net/2010/04/Implementing-a-dropbox-service-with-the-Blobstore-API-part-3-Multiple-upload-support

+0

私はその解決策を試してみます - リンクのおかげで - ありがとうございました。 –

+1

ニックのブログの解決策は、私が必要とする以上のものです。しかし、ここで役立つ答えは、 "各ファイルには独自のアップロードURLが必要です"ということです。 –

+0

各ファイルに独自のアップロードURLが必要な場合、なぜ 'BlobstoreUploadHandler.get_uploads()'は 'BlobInfo'オブジェクトのリストを返しますか? Blobstoreは単一のイメージを期待しているようですが、 'BlobstoreUploadHandler'は複数のイメージを扱うように設計されているようです。 – Trevor

1

あなたは、配列を掲載する予定[]続い同じ名前、にファイルを投稿できる:

フォームハンドラで次に
<form action="{{upload_url}}" method="POST" enctype="multipart/form-data"> 
    <label>Key Name</label><input type="text" name="key_name" size="50"><br/> 
    <label>name</label><input type="text" name="files[]" size="50"><br/> 
    <label>image</label><input type="file" name="files[]" size="50"><br/> 
    <label>thumb</label><input type="file" name="thumb" size="50"><br/> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

、あなたはこのような何か(あなたのWebフレームワークに依存する)ことができます。

for uploaded_file in request.FILES.getlist('files'): 
    #do something with uploaded_file 
0

pluploadの最新バージョンを使用して、このビットのコードでUploadQueueをGAEと連携させることができました。 JavaScriptはCoffeeScriptですが、本当に必要な場合はJavaScriptへの変換が容易でなければなりません。私は2つだけが一度に2つのファイルをアップロードする必要があるため、2つのUPLOAD_URLの変数を作成していた私は何をやってしまった

$("#fileUploader").pluploadQueue 
     runtimes : 'html5,html4' 
     use_query_string : false 
     max_file_size : '3mb' 
     multipart: true 
     unique_names : true 
     multiple_queues : true 
     filters : [{title : "Image files", extensions : "jpg,gif,png"}] 
     preinit: 
      UploadFile: (up, file) -> 
       $.ajax 
        url: '/api/upload/url' 
        async: false 
        success: (data) -> 
         up.settings.url = data.url 
関連する問題