在我的应用程序(GAE上的GWT)中,我们在数据库中存储了存储在blobstore上的服务URL。当用户选择其中一个文件并单击“删除”时,我们需要从blobstore中删除该文件。
这是我们的代码,但它根本没有删除文件:
public void remove(String fileURL)
{
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String key = getBlobKeyFromURL(fileURL);
BlobKey blobKey = new BlobKey(key);
blobstoreService.delete(blobKey);
}
fileURL
看起来像这样:
http://lh6.ggpht.com/d5VC0ywISACeJRiC3zkzaZug-tPsaI_LGt93-e_ATGTCwnGLao4yTWjLVppQ
getBlobKeyFromURL()
将返回最后一个“/”之后的内容,在此示例中:
d5VC0ywISACeJRiC3zkzaZug-tPsaI_LGt93-e_ATGTCwnGLao4yTWjLVppQ
* 编辑: * 似乎getBlobKeyFromURL()返回的不是blobKey。 blobKey是一个不同的字符串,前面有/download?blob-key=
,返回fileURL
。所以现在的问题是:如何从URL获取blobKey?
你可以请一下建议吗?
由于
答案 0 :(得分:4)
无法从服务URL派生原始blobkey。如果这是您想要做的事情,那么我建议存储URL - >生成URL时,数据存储区中的BlobKey映射。
答案 1 :(得分:0)
如果您使用URL参数,例如www.example.com/?name=yourUrlwanttodelete
,则以下代码剪切会返回blobkeypublic class ShowImage extends HttpServlet { private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobs toreService();
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doPost(req, res); }
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String par = req.getParameter("name"); if (par != null) { Query query = new Query("__BlobInfo__");
query.addFilter("filename", Query.FilterOperator.EQUAL, req.getParameter("name"));
DatastoreService datastore = DatastoreServiceFactory.getDatas toreService(); PreparedQuery pq = datastore.prepare(query); List<Entity> entList = pq.asList(FetchOptions.Builder.w ithLimit(1)); if (entList.size() > 0) { BlobKey blobKey = new BlobKey(entList.get(0).getKey(). getName());