我正在制作一个 Android 应用程序并尝试OpenStack
使用它的 API 在对象存储(Swift)中存储文件,例如 docx、音乐、照片、视频。但我在存储这些文件时遇到了问题。从我得到的 API 中,它只存储文件的名称,但是当我尝试从仪表板下载它时,对象本身就丢失了。
我从OpenStack
Documentations 得到的 API 就是这个。
方法: PUT 链接: (mylink)/v1/AUTH_(account)/(container)/(object)
HEADER Content-type:(必需) X-Auth-Token:(必需) Content-Length:(可选) ETag:(可选) Content-Disposition:(可选) Content-Encoding:(可选) X-Delete-At:(可选)X-Object-Meta-PIN:X-Delete-After:X-Object-Meta
身体 无
我尝试上传的第一个文件是一张照片,我尝试将它作为二进制(base64)发送,因为在 API 中它也只接受字符串。我不知道把它放在哪里,所以我尝试在 Content-Disposition 中推送它,但它失败了。我不确定我还能将照片放在 openstack 可以接受的有限数据上的什么地方。
请帮忙。我想查看我从手机上传的文件并从仪表板下载。
这是我的代码:
HttpClient httpclient = new DefaultHttpClient();
HttpPut httpost = new HttpPut("mylink/v1/AUTH_fa6362c6520449f9a8905e84fee68f8c/photos/"+imagename);
try {
httpost.setHeader("X-Auth-Token", "nasbfdblfdfsdfsdfd123a");
httpost.setHeader("Content-Type", "application/octet-stream");
httpost.setHeader("Content-Length ", Integer.toString(binaryimagelength) );
httpost.setHeader("Content-Disposition ", binaryimage);// this is path of the image from the phone memory (e.g. )
Log.i("", "pushing your data");
HttpResponse response=httpclient.execute(httpost);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response2 = httpclient.execute(httpost, responseHandler);
Log.i("", "Response1: " + response.getStatusLine());
Log.i("", "Response2: " + response2);
}catch (IOException e) {
Log.e("", "IOException " + e.toString());
// TODO Auto-generated catch block
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT).create();
alertDialog.setTitle("Error");
alertDialog.setMessage(e.toString());
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Add your code for the button here.
}
});
alertDialog.show();
}