0

ProgressListenerChunkSizeを有効にして (つまり、DirectUploadEnabledを無効にして)ファイルを Google ドライブにアップロードしようとしています。このようにして、より信頼性の高いアップロードと、ユーザーへの進行状況の表示の可能性が得られます。

submit() で GAE にファイルをポストする FormPanel と FileUploadField を使用して、GWT Web サイトから GAE にファイルを転送します。GAE では、 org.apache.commons.fileuploadを使用してドキュメントをストリームとして受信する UploadServlet でファイルを受信します。ドキュメントが大きすぎるため、GAE で完全なドキュメントを受け取りたくありません。したがって、着信リクエストから受信したストリームを使用して、Google ドライブへのアップロード (挿入) を開始します。

ここで問題があります。挿入のために、ストリームのサイズを知る必要があります。

int lContentLength = getRequest().getContentLength();
FileItemStream lFileItemStream = getFileItemStream();
InputStream lInputStream = lFileItemStream.openStream();
BufferedInputStream lBufferedInputStream = new BufferedInputStream(lInputStream);
InputStreamContent lInputStreamContent = new InputStreamContent(pContentType, lBufferedInputStream);
lInputStreamContent.setLength(lContentLength);

私の最初の推測は、着信サーブレット リクエストからのContentLengtでした。しかし、これは完全なリクエスト (パラメーターとして使用される他のフィールドも含む) に関係するため、正しくありません。ドライブ オプションDirectUploadEnabledがないと、アップロードされたドキュメントから正確なストリーム サイズが必要です。そうしないと、アップロードが最後に停止します...

このドキュメントサイズを把握するにはどうすればよいですか? Google の例は、ローカル ファイルを使用しているため、ばかげています。

https://code.google.com/p/google-api-java-client/wiki/MediaUpload

はい、ローカル ファイルからファイル サイズ(mediaFile.length())を取得するのは簡単です。しかし、ウェブサイトから...いくつかのサイトは、ウェブサイトからsubmit()の前にファイルサイズを取得することは不可能であると指定しており、完全なファイルをロードせずにGAEでストリームサイズを決定することも不可能のようです...

このストリームサイズを決定するにはどうすればよいですか? この問題の別の解決策はありますか?

4

0 に答える 0