【问题标题】:Cannot delete GAE file无法删除 GAE 文件
【发布时间】:2014-01-09 13:05:46
【问题描述】:

我正在尝试在上传失败后删除文件

final FileService fileService = FileServiceFactory.getFileService();
fileService.delete(file);

但我明白了:

java.lang.UnsupportedOperationException: File \/blobstore\/writable:AD8BvukH[...]qau-Bb7AD does not have a finalized name

当我尝试用

完成文件时
FileWriteChannel writeChannel = fileService.openWriteChannel(file, true);
writeChannel.closeFinally();

然后 openWriteChannel() 失败

com.google.appengine.api.files.FinalizationException
[...]
Caused by: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 101: 

ApplicationError 101 是什么意思? 如何正确删除文件?

【问题讨论】:

  • 本可以变成orphaned。

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


【解决方案1】:

看起来其他人已经报告了这个问题,虽然它已得到解决,但仍然可能存在文件损坏的问题。

2013 年 9 月 11 日凌晨 1:14

我们现在已经解决了这个问题,以免将来再次发生。然而, 过去创建的一些 blob 仍然会出错。我们 正在努力修复这些 blob。

John Lowry 代表 App Engine 团队

http://grokbase.com/t/gg/google-appengine/138xrawqw0/broken-blobstore-files-what-to-do

UnsupportedOperationException

对于第一个错误,the documentation states:

java.lang.UnsupportedOperationException - 如果删除不支持文件类型或文件没有最终名称。

可能是文件已经定稿,由于其他原因无法删除。

ApplicationError: 101

我认为第二个错误是指未找到的异常。

FinalizationError: ApplicationError: 101 Blobkey not found.

这可能会为您澄清问题。

只有在创建文件并写入文件时才使用 finalize。但是你 完成后无法写入文件。更新文件 在 blobstore 中,您总是需要创建一个新的。当你 读取文件,您不必完成它。要读取您拥有的文件 使用blobreader。看: https://developers.google.com/appengine/docs/python/blobstore/blobreaderclass

通过https://stackoverflow.com/a/12855653/1085891

修复损坏的上传

你可以resume the upload。

如果传输中断,您可以使用--db_filename=... 参数从中断处恢复传输。

通过How to finish a broken data upload to the production Google App Engine server?

其他解决方案/信息:

【讨论】:

  • 感谢您的参考。不幸的是,他们并没有真正提供帮助。
  • @Michael 所以您仍然无法删除孤立文件?我看到关于这个问题的许多其他问题和答案:google.com/search?q=google+app+engine+orphaned
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2011-11-03
  • 2014-02-07
  • 2020-06-09
  • 1970-01-01
相关资源
最近更新 更多