0

我可以使用以下代码将文件作为 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 密钥而不是文件。请给我一个解决它的想法。

4

2 回答 2

3

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

  1. 使用提供的 blobstore 上传功能:您的客户端调用服务器,该服务器使用一次性上传 url(通过创建blobstoreService.createUploadUrl("/upload"))进行回复。然后,您可以在 Apache Common File Uploader 中一次性使用此 URL。

  2. 在您的代码中处理上传:创建一个多部分处理程序,然后通过 Files API 以编程方式将数据保存到 blobstore

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

于 2013-01-02T10:50:15.297 回答
1

做这样的事情:

        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxPostSize);

        for (FileItemIterator it = upload.getItemIterator(request); it.hasNext();) {
            FileItemStream item = it.next();
            final byte[] fileData = IOUtils.toByteArray(item.openStream());

            // store data

        }

现在将 存储fileData在数据存储中。确保您使用 . 检查是否item是表单字段item.isFormField()

或者查看Streaming API

将文件存储在 Blobstore 中是这样完成的假设您有表单字段<input type="file" name="myFile">

Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request);
BlobKey blobKey = blobs.get("myFile");
于 2013-01-02T09:56:53.040 回答