Как получить доступ к файлам, хранящимся в Bluemix Object Storage, с помощью Android?
Я работаю над приложением для Android, где хочу получать данные из облака. Я сохранил свои данные в Bluemix Object Storage, но не получил никакой помощи о том, как получить доступ к данным простым способом.
Я также попробовал сервис хранения AWS S3. Он имеет простую консоль, где я могу получить URL-адрес файла для доступа к нему из приложения для Android, как это.
https://s3-ap-southeast-1.amazonaws.com/com.myapp/540.mp4
Есть ли такой способ получить URL файла в Bluemix?
2 ответа
В зависимости от того, как вы спроектировали свое приложение, существует несколько возможных решений вашей проблемы.
В настоящее время не выпущен SDK Android Client Object для хранения. Здесь вы можете найти текущие SDK для Object Storage:
https://github.com/ibm-bluemix-mobile-services
В зависимости от того, какой сервер вы настроили, вы можете легко настроить прокси-маршрутизатор, который безопасно подключается к экземпляру службы хранилища объектов и направляет вывод на URL-адрес, который может использоваться вашим приложением Android.
Например, используя pkgcloud
и серверная часть Node.js:
routes.js
var vcap_objectstorage = require('../utils/vcap')('Object-Storage'),
objectstorage = require('../modules/objectstorage');
module.exports = function(app) {
var router = app.loopback.Router();
// proxy for object storage service
router.get('/api/Products/image/:container/:file', function(req, res) {
objectstorage(vcap_objectstorage.credentials).download(req.params.container, req.params.file, function(download) {
download.pipe(res);
});
});
app.use(router);
}
objectstorage.js
var pkgcloud = require('pkgcloud');
module.exports = function(creds) {
var config = {
provider: 'openstack',
useServiceCatalog: true,
useInternal: false,
keystoneAuthVersion: 'v3',
authUrl: creds.auth_url,
tenantId: creds.projectId,
domainId: creds.domainId,
username: creds.username,
password: creds.password,
region: creds.region
};
return {
download: function(container, file, cbk) {
var client = pkgcloud.storage.createClient(config);
client.auth(function (error) {
if(error) {
console.error("Authorization error for storage client (pkgcloud): ", error);
}
else {
var request = client.download({
container: container,
remote: file
});
cbk(request);
}
});
}
};
};
Как использовать IBM Object Storage => Auth => Создать контейнер => Загрузить объект
var pkgcloud = require('pkgcloud');
var config = {
provider: 'openstack',
useServiceCatalog: true,
useInternal: false,
keystoneAuthVersion: 'v3',
authUrl: 'https://identity.open.softlayer.com',
tenantId: 'XXXXXXXXXXXXXX', //projectId from credentials
domainId: 'XXXXXXXXXXXXX',
username: 'XXXXXXXXXXXXXXX',
password: 'XXXXXXXXXXXXXXXX',
region: 'dallas' //dallas or london region
};
var storageClient = pkgcloud.storage.createClient(config);
storageClient.auth(function(err) {
if (err) {
console.error('error'+err);
}
else {
console.log(storageClient._identity);
}
});
var fs = require('fs');
storageClient.createContainer({
name: 'XXXXXXX'
}, function (err, container) {
if (err) {
console.error(err);
}
else {
var myFile = fs.createReadStream('/home/amit/Downloads/cloud-app-developer.png');
var upload = storageClient.upload({
container: container.name,
remote: 'cloud-app-developer.png'
});
upload.on('error', function(err) {
console.error(err);
});
upload.on('success', function(file) {
console.log(file.toJSON());
});
myFile.pipe(upload);
}
});