Java 使用文件服务URL从blobstore删除文件
在我的应用程序(GAE上的GWT)中,我们将存储在blobstore上的服务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 =
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,如下所示: