,我認爲你是在一個略顯尷尬的方式接近你的問題。
它不是Blobstore的問題,它給你這個blob密鑰。你可以做的是:
- 創建一個上傳的servlet捕捉文件上傳
- 獲取字節,並將其存儲使用AppEngine上文件API
下面就讓我來告訴你(從工作的代碼塊我的項目):
@POST
@Consumes("multipart/form-data")
@Path("/databases/{dbName}/collections/{collName}/binary")
@Override
public Response createBinaryDocument(@PathParam("dbName") String dbName,
@PathParam("collName") String collName,
@Context HttpServletRequest request, @Context HttpHeaders headers,
@Context UriInfo uriInfo, @Context SecurityContext securityContext) {
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator fileIterator = upload.getItemIterator(request);
while (fileIterator.hasNext()) {
FileItemStream item = fileIterator.next();
if ("file".equals(item.getFieldName())){
byte[] content = IOUtils.toByteArray(item.openStream());
logger.log(Level.INFO, "Binary file size: " + content.length);
logger.log(Level.INFO, "Mime-type: " + item.getContentType());
String mimeType = item.getContentType();
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile(mimeType);
String path = file.getFullPath();
file = new AppEngineFile(path);
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
writeChannel.write(ByteBuffer.wrap(content)); // This time we write to the channel directly
writeChannel.closeFinally();
BlobKey blobKey = fileService.getBlobKey(file);
} else if ("name".equals(item.getFieldName())){
String name=IOUtils.toString(item.openStream());
// TODO Add implementation
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
正如你可以看到Blob存儲服務是「象」只是其中的一部分,你必須讓自己的API或東西,將讓這些圖片或任何二進制數據到Blobstore,包括將其文件名保存到數據存儲區。
你要做的另一件事情是你的API或接口把它弄出來從Blob存儲到客戶端:
- 像
@GET
資源與查詢參數一樣?filename=whatever
- 然後你會從取數據存儲與此文件名相關聯的blobkey
這只是一個簡化示例,您必須確保保存Filename和Blobkey,即在正確的容器和用戶中,如果您需要d。
您可以直接使用Blobstore API和Image API,但如果您需要進一步控制,則必須設計自己的API。它並不難,Apache Jersey和JBoss Resteasy與GAE完美搭配。
GAE可以使用圖像服務api來提供來自GAE的圖像。在這篇文章中看到我的解決方案http://stackoverflow.com/questions/15306790/how-can-i-upload-an-thumbnail-image-blob-at-the-same-time-as-an-entity-into- a/15309278#15309278 –
@ user2216137我的回答有幫助嗎? – xybrek