FileService を使用して保存されたファイルを削除しようとしています。いくつかのケースでは削除が成功しますが、ほとんどの場合は成功せず、パターンは見つかりませんでした。ローカル サーバーの Windows 7 で Eclipse を使用しています。どうすればファイルを削除できますか?
編集: appengine にアップロードすると機能します。
格納コードは次のとおりです。
try
{
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile(content_type, fileName);
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
byte[] b1 = new byte[BUFFER_SIZE];
int readBytes1;
while ((readBytes1 = is.read(b1)) != -1)
{
writeChannel.write(ByteBuffer.wrap(b1, 0, readBytes1));
}
writeChannel.closeFinally();
blobKey = fileService.getBlobKey(file);
item_image_blob_key = blobKey.getKeyString();
}
catch (Exception e)
{
System.out.println(e.getLocalizedMessage());
e.printStackTrace(response.getWriter());
}
そしてここに削除の試みがあります:
@Override
public long deleteItem(Long id)
{
System.out.println(LOG +" Trying to delete item with this id: " + id);
Key parent = KeyFactory.createKey("MffItems", MFF_ITEM_ROOT_KEY);
Key key = KeyFactory.createKey(parent, "Item", id);
try
{
Entity e = datastore.get(key);
String image_key = (String) e.getProperty("image_blob_key");
BlobKey blobKey = new BlobKey(image_key);
final AppEngineFile f = fileService.getBlobFile(blobKey);
if(f.isReadable())
{
System.out.println(LOG + " file is readable");
if(f.hasFinalizedName())
{
System.out.println(LOG + " file has finalized name: " + f.getNamePart());
fileService.delete(f); // Problematic line
datastore.delete(key);
return id;
}
}
}
catch(Exception e)
{
System.out.println(LOG + " " + e.toString() + " " + e.getMessage());
}
// TODO Auto-generated method stub
return -1;
}
ここに私が得ているエラーがあります:
I_MFF_ItemService この ID のアイテムを削除しようとしています: 2 I_MFF_ItemService ファイルは読み取り可能です I_MFF_ItemService ファイルの名前が確定しました: TXP5bVCmBVugDOxktBGv_w 2013 年 6 月 30 日 12:24:03 PM com.google.appengine.api.blobstore.dev.LocalBlobstoreService$1 警告: 実行できませんでしたblob を削除: java.io.IOException: 削除できませんでした: C:\Users\Gideon\Desktop\dev\workspace2\ItemManager1.41\war\WEB-INF\appengine-generated\TXP5bVCmBVugDOxktBGv_w at com.google.appengine.api. blobstore.dev.FileBlobStorage.deleteBlob(FileBlobStorage.java:79) at com.google.appengine.api.blobstore.dev.LocalBlobstoreService$1.run(LocalBlobstoreService.java:153) at java.security.AccessController.doPrivileged(ネイティブ メソッド) com.google.appengine.api.blobstore.dev.LocalBlobstoreService.deleteBlob(LocalBlobstoreService.java:146) で、sun.reflect で。com.google. appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.callInternal(ApiProxyLocalImpl.java:521) at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:475) at com.google.appengine.tools. development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:452) で java.util.concurrent.Executors$PrivilegedCallable$1.run(未知のソース) で java.security.AccessController.doPrivileged(ネイティブ メソッド) で java.util.concurrent. java.util.concurrent の Executors$PrivilegedCallable.call(不明なソース)。FutureTask$Sync.innerRun(未知のソース) で java.util.concurrent.FutureTask.run(未知のソース) で java.util.concurrent.ThreadPoolExecutor.runWorker(未知のソース) で java.util.concurrent.ThreadPoolExecutor$Worker.run( java.lang.Thread.run(不明なソース) の不明なソース)
I_MFF_ItemService java.io.IOException: Blobstore の失敗 Blobstore の失敗 2013 年 6 月 30 日 12:24:27 PM com.google.appengine.api.datastore.dev.LocalDatastoreService$PersistDatastore 持続情報: データストアを持続する時間: 20 ミリ秒