1

GAE の「アップロード成功」ハンドラからファイル コンテンツを取得しようとしています。ファイルは次の URL にアップロードされます。

blobstoreService.createUploadUrl("/onupload", uploadOptions));

だから、/onupload私は次のようにやっています:

BlobKey myFile = context.getRequestBlobs().get("myFile").get(0);

そして、私は試しました:

InputStream is = new BlobstoreInputStream(myFile);
// .. read the stream

失敗したcom.google.appengine.api.blobstore.BlobstoreInputStream$BlobstoreIOException: BlobstoreInputStream received an invalid blob key: =?ISO-8859-1?Q?AMIfv96J=2DsyIbhm5=5FET?=

FileReadChannel ch = fileService.openReadChannel(myFile, false);

失敗した

java.io.IOException
    at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:615)
    at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:588)
    at com.google.appengine.api.files.FileServiceImpl.open(FileServiceImpl.java:521)
    at com.google.appengine.api.files.FileServiceImpl.openForRead(FileServiceImpl.java:481)
    at com.google.appengine.api.files.FileServiceImpl.openForRead(FileServiceImpl.java:473)
    at com.google.appengine.api.files.FileServiceImpl.openReadChannel(FileServiceImpl.java:197)

私が間違っていることについての考えはありますか?アップロードハンドラーでファイルのコンテンツを読み取ることはまったく可能ですか?

blobstore fs (GS ではない) では問題なく動作していたことに注意してください。

4

1 に答える 1

0

Google クラウド ストレージからファイルを読み込もうとしていると思います。ドキュメントの例 [1] を見たことがありますか?

特にこの部分:

/ At this point, the file is visible in App Engine as:
// "/gs/BUCKETNAME/FILENAME"
// and to anybody on the Internet through Cloud Storage as:
// (http://storage.googleapis.com/BUCKETNAME/FILENAME)
// We can now read the file through the API:
String filename = "/gs/" + BUCKETNAME + "/" + FILENAME;
AppEngineFile readableFile = new AppEngineFile(filename);
FileReadChannel readChannel =
    fileService.openReadChannel(readableFile, false);
// Again, different standard Java ways of reading from the channel.
BufferedReader reader =
         new BufferedReader(Channels.newReader(readChannel, "UTF8"));
String line = reader.readLine();
resp.getWriter().println("READ:" + line);

// line = "The woods are lovely, dark, and deep."
readChannel.close();

[1] https://developers.google.com/appengine/docs/java/googlestorage/overview#Complete_Sample_App

于 2012-12-21T12:26:46.517 に答える