在文件名中使用通配符我正在尝试从GCS存储桶中读取文件。 在gsutil命令行中,通配符正在指定文件名。
但是在java client api中
GcsFilename filename = new GcsFilename(BUCKETNAME, "big*");
它正在搜索名为" big *"的文件而不是以big开头的文件。 请帮助我如何在GCSFilename中使用通配符。
提前致谢。
答案 0 :(得分:2)
通配符是gsutil的一项功能,但它们并不是Google云端存储API的固有部分。但是,您可以像gsutil一样处理此问题。
如果您想查找以特定前缀开头的每个对象的名称,Google云端存储的API会提供一个带有"前缀的列表方法"论点。仅返回与前缀匹配的对象。这对任意正则表达式都不起作用,但它适用于您的示例。
答案 1 :(得分:1)
正如Brandon Yarbrough所提到的,GcsFilename代表一个GCS对象的名称,它可以包含任何有效的UTF-8字符[不包括一些如\ r \ n但包括'*'的字符 不建议)。有关详情,请参阅https://developers.google.com/storage/docs/bucketnaming#objectnames。 GAE GCS客户端尚不支持列表(虽然计划添加),所以现在您可以直接使用GCS XML或JSON API(使用urlfetch)或使用Java GCS api客户端https://developers.google.com/api-client-library/java/apis/storage/v1 请参阅后一个选项的示例:
public class ListServlet extends HttpServlet {
public static final List<String> OAUTH_SCOPES =
ImmutableList.of("https://www.googleapis.com/auth/devstorage.read_write");
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
String bucket = req.getParameter("bucket");
AppIdentityCredential cred = new AppIdentityCredential(OAUTH_SCOPES);
Storage storage = new Storage.Builder(new UrlFetchTransport(), new JacksonFactory(), cred)
.setApplicationName(SystemProperty.applicationId.get()).build();
Objects.List list = storage.objects().list(bucket);
for (StorageObject o : list.execute().getItems()) {
resp.getWriter().println(o.getName() + " -> " + o);
}
} catch (Exception ex) {
throw new ServletException(ex);
}
}
}