使用文件提供URL从blobstore中删除文件

时间:2012-11-03 10:57:47

标签: java google-app-engine gwt google-cloud-datastore blobstore

在我的应用程序(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?

你可以请一下建议吗?

由于

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

如果您使用URL参数,例如www.example.com/?name=yourUrlwanttodelete

,则以下代码剪切会返回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());