java - 如何使用谷歌应用引擎在servlet中将上传的文件作为blob获取

标签 java google-app-engine

我可以使用下面的代码将文件上传为 blob,

<form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data">
<input type="file" name="myFile">
<input type="submit" value="Submit">
</form>

但就我而言,我使用 Apache Common File Uploader上传文件。所以我的表单操作如下,

<form action="/upload" method="post" enctype="multipart/form-data">

现在在我的 servlet 中,我正在将文件作为 InputStream 获取。如果我想在同一个 servlet 文件中将文件转换为 blob,我该如何转换它。请给我提出一个想法。

已更新

我尝试过 Writing files to blob store我的代码如下,

FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile(mime,fileName);
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
byte[] b1 = new byte[BUFFER_SIZE];
int readBytes1 = is.read(b1, 0, BUFFER_SIZE);
while (readBytes1 != -1) {
writeChannel.write(ByteBuffer.wrap(b1, 0, BUFFER_SIZE));}

现在我可以在应用程序引擎中上传文件,它存储 blob 值,但我无法查看 blob 值。当我使用<%= blobstoreService.createUploadUrl("/upload") %>时这行我的应用程序引擎向我显示“查看 Blob”选项,但现在它不存在。此外,当我使用 blob 列表查看文件时,它没有显示并显示“0”字节。我认为它只存储 blob 键而不存储文件。请给我一个解决这个问题的想法。

最佳答案

有两种方法可以做到这一点:

  1. 使用provided blobstore upload functionality :您的客户端调用服务器,服务器会回复一次性上传 URL(通过 blobstoreService.createUploadUrl("/upload") 创建)。然后您就可以在您的 Apache Common File Uploader 中一次性使用该 URL。

  2. 在代码中处理上传:create a multipart handler然后save data to blobstore programmatically via Files API .

请注意,选项 2. 属于标准 GAE 32Mb 请求/响应大小限制。选项 1. 文件上传限制为 2Gb。

关于java - 如何使用谷歌应用引擎在servlet中将上传的文件作为blob获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14118571/

相关文章:

windows - AppEngine SDK for Go with Bash on Ubuntu on Windows

java - 如何在 App Engine 数据存储区中将 'int' Java 模型属性设置为其原始未设置状态而不是零?

java - 如何使用 getter 函数访问另一个类中的私有(private)变量?

java - 当我从 JDK 调试类文件时,为什么 Eclipse 不显示局部变量值?

java - 是否可以使用 icu4j UnicodeSet 类代替正则表达式进行模式匹配?

java - 实现自定义连接池?

Java:在同一个接口(interface)的另一个默认方法中调用一个默认方法

python - pyramid + jinja2 和新的 GAE 运行时

google-app-engine - 将 gsutil 授权为服务帐户

google-app-engine - Google Cloud SQL 上的 "Cloud SQL connection error 2"是什么?