2

HTML5の複数ファイル入力を使用して、複数の画像ファイルをGAEBlobstoreに保存しようとしています。

私のWebアプリケーションは写真家が写真をバッチアップロードするために使用するため、クライアントのブラウザで複数のファイルを選択できるようにすることが非常に重要です(一度に200枚以上の写真をアップロードするのは面倒です)。

クライアント側のHTMLは次のようになります。

   <form action = "/upload" method="post" enctype="multipart/form-data">
     <input type="file" name="myFiles[]" multiple="true"/>
     <input type="submit"/>
   </form>

サーバー側では、JavaHttpServletを使用して写真のグループを保存します。

public class PhotoUploadServlet extends HttpServlet {

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
      //Upload each photo of myFiles[] in sequence to the GAE Blobstore
  }

ここで説明する手順を使用して、各写真を個別に保存することを計画しています。

問題: HttpServletRequestのmyFiles[]パラメーターからすべての画像を個別に抽出する方法がわかりません。

myFiles []パラメータを、のように順番に簡単に使用できるものとして解釈する方法を誰かに説明してもらえますかList<SomeImageType>List<SomeImageType>そうすれば、各写真を個別にBlobstoreに簡単に保存できます。

前もって感謝します!

PS:私はすでにこの投稿を見ましたが、Pythonを知らないので、NickJohnsonのブログ投稿で提案された解決策に少し迷っています。

4

1 に答える 1

3

サーブレットでは、次のように blob を取得します。

Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);

ただし、ファイルの名前を変更するには、小さなハックが必要です。そうしないと、blobs フィールドにキーが 1 つだけ含まれます。

<script type="text/javascript">
   function uploadFile() {
     if (window.File && window.FileList) {
      var fd = new FormData();
      var files = document.getElementById('fileToUpload').files;
      for (var i = 0; i < files.length; i++) {  
        fd.append("file"+i, files[i]);
      }
      var xhr = new XMLHttpRequest();
      xhr.open("POST", document.getElementById('uploadForm').action);
      xhr.send(fd);
    } else {
      document.getElementById('uploadForm').submit();   //no html5
    }
}
</script>

<form id="uploadForm" enctype="multipart/form-data" method="post"
        action=<%=blobstoreService.createUploadUrl("/upload") %>">
   <input type="file" name="fileToUpload" id="fileToUpload" multiple />
   <input type="button" onclick="uploadFile();" value="Upload" />
</form>

これは GAE の問題です: http://code.google.com/p/googleappengine/issues/detail?id=3351

于 2011-11-24T10:25:52.037 に答える