我正在尝试在启用ProgressListener和ChunkSize的情况下将文件上传到 Google Drive (因此禁用了DirectUploadEnabled)。这样我有一个更可靠的上传和向用户指示进度的可能性。
我使用 FormPanel 和 FileUploadField 将文件从 GWT 网站传输到 GAE,后者在 submit() 上将文件发布到 GAE。在 GAE 上,我收到带有 UploadServlet 的文件,它使用org.apache.commons.fileupload将文档作为流接收。我不想收到有关 GAE 的完整文件,因为这些文件太大了。因此,我使用来自传入请求的接收流开始上传(插入)到 Google Drive。
现在有一个问题;对于插入,我需要知道流的大小;
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);
我的第一个猜测是来自传入 Servlet 请求的ContentLengt 。但这是不正确的,因为这涉及完整的请求(其中还包含用作参数的其他字段)。如果没有 Drive 选项DirectUploadEnabled,我需要上传文档中的确切流大小,否则上传停止在最后......
我如何把握这个文件的大小?Google 的示例很愚蠢,因为它使用了本地文件;
https://code.google.com/p/google-api-java-client/wiki/MediaUpload
是的,从本地文件很容易获得文件大小(mediaFile.length())。但是从一个网站......几个网站指定不可能在提交()之前从网站获取文件大小,而且在不加载完整文件的情况下似乎也无法确定 GAE 上的流大小......
我如何确定这个流大小?这个问题还有其他解决方案吗?