Java 使用文件服务URL从blobstore删除文件

Java 使用文件服务URL从blobstore删除文件,java,google-app-engine,gwt,google-cloud-datastore,blobstore,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 =

在我的应用程序(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=
返回
文件URL
。所以现在的问题是:如何从URL获取blobKey?

你能给我一些建议吗


谢谢

如果您使用URL参数,如www.example.com/?name=YourUrlWantDelete,以下代码被剪断后将返回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());
public类ShowImage扩展HttpServlet{private BlobstoreService BlobstoreService=BlobstoreServiceFactory.getBlobs toreService();
public void doGet(HttpServletRequest-req,HttpServletResponse-res)抛出ServletException,IOException{doPost(req,res);}
公共空隙DOPOST(HTTPServServestReq,HttpServletResponse res)抛出ServLeLead异常,IOExt{{Strar PAR=Req.GETPARTION(“名称”);如果(Par!= null){QueQue}=新查询(“Y-OB BLBIOFFUX”);
query.addFilter(“文件名”,query.filterooperator.EQUAL,req.getParameter(“名称”);
DatastoreService datastore=DatastoreServiceFactory.getdatastoreservice();PreparedQuery pq=datastore.prepare(query);List entList=pq.asList(FetchOptions.Builder.w ithLimit(1));if(entList.size()>0){BlobKey-BlobKey=new BlobKey(entList.get(0).getKey().getName());

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

此代码似乎正确。有任何错误/异常吗?blob是否存在?嗨,Peter。请参阅上面的编辑。谢谢!谢谢,但我相信这是正确的这不是我需要的。如果您有文件名(例如myPicture.jpg),则此代码提供blobKey。我拥有的是GAE的下载URL,如下所示: