每次运行以下代码时,文件都会保存在硬盘上。但是,我希望它只保存在Object Storage容器中。
OSClient os = OSFactory.builder()
.endpoint("...")
.credentials("...","...")
.tenantName("...")
.authenticate();
String containerName = "MyImgs";
String objectName = "test.jpg";
BufferedWriter output = null;
try {
File f = new File(objectName);
output = new BufferedWriter(new FileWriter(f));
output.write(text);
String etag = os.objectStorage().objects().put(containerName,
objectName,
Payloads.create(f));
} catch ( IOException e ) {
e.printStackTrace();
}
更新 我正在使用此API。
答案 0 :(得分:2)
查看Payloads的Javadoc,它有一个接收InputStream的方法。要将String作为InputStream读取,您可以执行
Payloads.create(new ByteArrayInputStream(text.getBytes());
这样就可以避免创建文件,只需要阅读。
答案 1 :(得分:1)
通过阅读OpenStack4j API,可以从InputStream
创建有效负载,那么为什么不这样做而不是File
?
使用如下辅助函数将text
转换为InputStream
:
private static InputStream newInputStreamFrom(String text) {
try {
return new ByteArrayInputStream(text.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new AssertionError(); // should not occur
}
}
然后你的代码看起来像这样:
OSClient os = OSFactory.builder()
.endpoint("...")
.credentials("...","...")
.tenantName("...")
.authenticate();
String containerName = "MyImgs";
String objectName = "test.jpg";
InputStream stream = newInputStreamFrom(text);
String etag = os.objectStorage().objects().put(containerName,
objectName,
Payloads.create(stream));