3

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

形:

<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>

次に、アップロードされたファイルごとにBlobInfoオブジェクトをフェッチしようとしています。

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に保存できるようにします。

4

3 に答える 3

5

各ファイルには独自のアップロードURLが必要なので、3つのファイルすべてが同じURLに投稿されると、何か奇妙なことが起こっていると思います。

複数のファイルのアップロードをサポートするための最良の解決策は、NickJohnsonのブログ投稿に記載されています。

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

于 2011-01-21T19:15:05.793 に答える
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
于 2011-01-21T19:17:31.630 に答える
0

最新バージョンのpluploadを使用して、UploadQueueをこのコードでGAEと連携させることができました。これはCoffeeScriptですが、本当に必要な場合はJavaScriptに簡単に戻すことができます。これは、サーバーから{url:"gaegeneratedurl"}として少しのjsonを取得することを前提としています。

    $("#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
于 2011-08-24T18:16:01.033 に答える