3

在我的应用程序(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=before 一起返回fileURL. 所以现在的问题是:如何从 URL 中获取 blobKey?

你能建议吗?

谢谢

4

2 回答 2

3

无法从服务 URL 派生原始 blobkey。如果这是您想要做的事情,那么我建议您在生成 URL 时将 URL -> BlobKey 映射存储在数据存储中。

于 2012-12-01T11:45:01.993 回答
-1

如果您使用诸如 www.example.com/?name=yourUrlwanttodelete 之类的 URL 参数,以下代码片段将返回 blobkey

public 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());
于 2012-11-03T13:29:24.367 回答