Как получить доступ к файлам, хранящимся в Bluemix Object Storage, с помощью Android?

Я работаю над приложением для Android, где хочу получать данные из облака. Я сохранил свои данные в объектном хранилище Bluemix, но не получил никакой помощи в том, как получить доступ к данным простым способом.

Я также попробовал службу хранения AWS S3. У него есть простая консоль, где я могу получить URL-адрес файла, чтобы получить к нему доступ из приложения Android, как это.

https://s3-ap-southeast-1.amazonaws.com/com.myapp/540.mp4

Есть ли такой способ получить URL-адрес файла в Bluemix?


person Ritesh    schedule 26.06.2016    source источник


Ответы (2)


В зависимости от того, как вы спроектировали свое приложение, существует несколько возможных решений вашей проблемы.

В настоящее время не выпущен клиентский SDK Object Storage для Android. Здесь вы можете найти текущие 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);
                }
            });
        }
    };
};
person joe    schedule 26.06.2016
comment
Спасибо @joe, но, поскольку я не знаю о Node.js или других подобных вещах, мне бы хотелось простое решение, в котором мне не нужно прилагать больше усилий к поддерживаемой части. - person Ritesh; 26.06.2016
comment
На данный момент Android Client SDK отсутствует, поэтому вам остается только использовать REST API, задокументированные в Bluemix, из вашего Android-приложения или настроить простую серверную часть. Если вам нужна эта функция, вы можете запросить ее здесь: ibm- bluemix.uservoice.com/forums/311383-ibm-bluemix-ideas - person joe; 26.06.2016
comment
Да, правильно, @joe... запросит эту функцию... ценю вашу помощь. - person Ritesh; 27.06.2016

Как использовать IBM Object Storage => Аутентификация => Создать контейнер => Загрузить объект

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);
}
});
person Amit    schedule 09.09.2016