1

ファイル サービスを使用してデータを Google アプリ エンジンに保存しようとしたところ、正常にアップロードされましたが、後で blob 値として保存されないことに気付きました。だから私はググってこのリンクを手に入れましたどうすればマルチパートフォームデータを処理できますか? または アプリへのファイルのアップロードを処理するにはどうすればよいですか? グーグル提供。

このドキュメントでは、コードは次のように記述されています。

 FileItemIterator iterator = upload.getItemIterator(req);
 while (iterator.hasNext()) {
 FileItemStream item = iterator.next();
 InputStream stream = item.openStream();
 if (item.isFormField()) {
 log.warning("Got a form field: " + item.getFieldName());
 } else {
 log.warning("Got an uploaded file: " + item.getFieldName() +", name = " + item.getName());

 // You now have the filename (item.getName() and the
 // contents (which you can read from stream). Here we just
 // print them back out to the servlet output stream, but you
 // will probably want to do something more interesting (for
 // example, wrap them in a Blob and commit them to the
 // datastore).

ここでは、それらを blob としてラップしてデータストアにコミットする方法を理解していません。誰でもこれを解決する方法を教えてもらえますか? この方法は、ファイルを blob 値として google app エンジンに保存しますか?

4

1 に答える 1

1
InputStream is = item.openStream();
try {
   FileService fileService = FileServiceFactory.getFileService();
   AppEngineFile file = fileService.createNewBlobFile(mime, fileName);
   boolean lock = true;
   FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
   byte[] buffer = new byte[BUFFER_SIZE];
   int readBytes;
   while ((readBytes = is.read(buffer)) != -1) {
       writeChannel.write(ByteBuffer.wrap(buffer, 0, readBytes));
   }
   writeChannel.closeFinally();
   String blobKey = fileService.getBlobKey(file).getKeyString();
} catch (Exception e) {
   e.printStackTrace(resp.getWriter());
}
于 2013-01-29T17:34:06.003 に答える