我可以使用下面的代码将文件上传为 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 键而不存储文件。请给我一个解决这个问题的想法。
最佳答案
有两种方法可以做到这一点:
使用provided blobstore upload functionality :您的客户端调用服务器,服务器会回复一次性上传 URL(通过
blobstoreService.createUploadUrl("/upload")
创建)。然后您就可以在您的 Apache Common File Uploader 中一次性使用该 URL。在代码中处理上传: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/