我已经上传至文件系统使用API来Blob存储的图像。这些文件已经成功上传,我可以在相应的目录中看到这些斑点。解码与文件系统API创建的文件
但后来,我该如何解码这些文件,发送回来的时候给客户端或使用Blob存储区API检索到的,我能够得到的图像?眼下/ Blob存储/写:XXX是不是对我很有用,因为当我在包装的<img src="/blobstore/writable:xxx" />
路径,它并没有给我一个图像。
我已经上传至文件系统使用API来Blob存储的图像。这些文件已经成功上传,我可以在相应的目录中看到这些斑点。解码与文件系统API创建的文件
但后来,我该如何解码这些文件,发送回来的时候给客户端或使用Blob存储区API检索到的,我能够得到的图像?眼下/ Blob存储/写:XXX是不是对我很有用,因为当我在包装的<img src="/blobstore/writable:xxx" />
路径,它并没有给我一个图像。
我把它固定的:
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile writableFile = fileService.createNewBlobFile(request.getParameter("qqfile"));
FileWriteChannel writeChannel = null;
try {
byte[] buffer = new byte[4096]; // 4MB
lock = true;
writeChannel = fileService.openWriteChannel(writableFile, lock);
// increase the buffer size as you are reading from the
// input stream. Read the input stream into buffer
for (int n; (n = stream.read(buffer)) != -1;){
writeChannel.write(ByteBuffer.wrap(buffer));
}
} finally {
writeChannel.closeFinally();
}
BlobKey blobKey = fileService.getBlobKey(writableFile);
ImagesService imagesService = ImagesServiceFactory.getImagesService();
// produces something like http://localhost:8888/_ah/img/SU52WMsoCRP3kqAvQqVW3g
String imageUrl = imagesService.getServingUrl(blobKey);
几个选项 -
使用getServingUrl创建一个URL到你的图像,然后返回网址作为响应的一部分。将该URL存储在数据存储中,因为该URL不会更改为同一个blob。这也可以让你动态调整大小和裁剪你正在服务的图像。这些URL是公开的,所以如果您想要某种形式的访问控制来提供您可能需要的图像选项(2)。
使用serveBlob和请求处理程序来发送图像。没有动态调整大小(如果需要,可以在处理程序中自行完成),但如果需要,可以ACL对每个请求进行ACL。
月1日,我不打算将图像存储在Blob存储区。相反,我正在使用文件系统API。但我是一个例外,而这样做:'java.lang.IllegalArgumentException异常:无法读取image'。你知道我可能做错什么吗? – drecute 2012-03-02 15:20:44
FYI文件系统API存储BLOB的任一的Blobstore或谷歌存储。您需要从存储的对象中生成一个blobkey。 – 2012-03-02 22:22:50