【发布时间】:2015-06-17 10:22:25
【问题描述】:
在我的 android 应用程序中,我正在访问 Google 云存储。我已经生成了私钥 xxxxxxxkey.p12。我已将我的密钥文件放在 assets 文件夹中。但是在运行项目时它没有打开 key.p12 文件。我试过把它放在assets文件夹外面,还是没有结果。
httpTransport = AndroidHttp.newCompatibleTransport();
AssetManager am = getAssets();
InputStream inputStream = am.open("xxxxxxxxxxKey.p12");
File file = createFileFromInputStream(inputStream);
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com")
.setServiceAccountScopes(Collections.singleton(STORAGE_SCOPE))
.setServiceAccountPrivateKeyFromP12File(file).build();
createFileFromInputStream()
private File createFileFromInputStream(InputStream inputStream) {
try {
File f = new File("download/MyKey.p12");
OutputStream outputStream = new FileOutputStream(f);
byte buffer[] = new byte[1024];
int length = 0;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.close();
inputStream.close();
return f;
} catch (IOException e) {
// Logging exception
}
return null;
}
我在 java 项目中做了同样的事情。有什么不同,是因为 android 吗?还是文件位置的路径不正确?
【问题讨论】:
-
您是否尝试将 Windows 路径分隔符
\替换为 Unix 路径分隔符/? -
你的意思是像“.//key.p12”?
-
不,就像
./key.p12一样简单。仅需要双反斜杠,因为这是 java 中的转义字符,因此您需要转义转义字符 ;) -
结果相同,ENOENT 异常。
-
为什么不使用 AssetManager 读取文件?或者如果你不想使用 AssetManager,把它放在 raw 文件夹中?
标签: java android google-cloud-storage assets google-cloud-platform