从Android连接到Azure Blob存储

从Android连接到Azure Blob存储,android,azure,Android,Azure,我正在尝试制作一个移动应用程序,最终在它的一个活动中将连接到Android中的Blob存储,以传输一组图像 但我甚至无法到达那里,因为其中一个要求是确保连接安全,因为客户可以是任何人,从他的手机,所以我在这里的第一步是在开始任何交易之前请求SAS令牌 这基本上是我遵循的两个步骤 1->在我的应用程序服务中实现了一个Azure函数,该函数返回SAS令牌(我从这里获得该函数: ) 2->尝试从我的Android代码调用该函数并获取我的SAS令牌 看起来非常简单,我确信是的,链接中的函数解释了请求具体

我正在尝试制作一个移动应用程序,最终在它的一个活动中将连接到Android中的Blob存储,以传输一组图像

但我甚至无法到达那里,因为其中一个要求是确保连接安全,因为客户可以是任何人,从他的手机,所以我在这里的第一步是在开始任何交易之前请求SAS令牌

这基本上是我遵循的两个步骤

1->在我的应用程序服务中实现了一个Azure函数,该函数返回SAS令牌(我从这里获得该函数: )

2->尝试从我的Android代码调用该函数并获取我的SAS令牌

看起来非常简单,我确信是的,链接中的函数解释了请求具体访问所需的http正文,我认为我在哪里失败了,下面是我调用函数的代码:

private void getStringFromAzure() throws MalformedURLException {
    JsonObject jsonObject = new JsonObject();
    jsonObject.addProperty("container", "uploadedimages");
    jsonObject.addProperty("permissions", "Write, Create");
    // Create the MobileService Client object and set your backend URL
    String yourURL = "https://mydirectory.azurewebsites.net/";
    MobileServiceClient mClient = new MobileServiceClient(yourURL, this);

    // Your query pointing to yourURL/api/values
    ListenableFuture<JsonElement> query = mClient.invokeApi("GetSasToken-Net", jsonObject, "POST", null);

    // Callback method
    Futures.addCallback(query, new FutureCallback<JsonElement>() {
        @Override
        public void onSuccess(JsonElement jsonElement) {


            final String result = jsonElement.toString();

            // Since you are on a async task, you need to show the result on the UI thread
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(mContext, result, Toast.LENGTH_LONG).show();
                }
            });
        }

        @Override
        public void onFailure(Throwable throwable) {
            Log.d(TAG, "onFailure: " + throwable.getMessage());
        }
    });
}
private void getStringFromAzure()引发错误的异常{
JsonObject JsonObject=新的JsonObject();
addProperty(“容器”、“上传的图像”);
addProperty(“权限”、“写入、创建”);
//创建MobileService客户端对象并设置后端URL
字符串yourURL=”https://mydirectory.azurewebsites.net/";
MobileServiceClient mClient=新的MobileServiceClient(您的URL,this);
//指向URL/api/值的查询
ListenableFuture query=mClient.invokeApi(“GetSasToken-Net”,jsonObject,“POST”,null);
//回调方法
Futures.addCallback(查询,newfutureCallback(){
@凌驾
成功时公共无效(JsonElement JsonElement){
最终字符串结果=jsonElement.toString();
//由于您正在执行异步任务,因此需要在UI线程上显示结果
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Toast.makeText(mContext,result,Toast.LENGTH_LONG).show();
}
});
}
@凌驾
失败时的公共无效(可丢弃){
Log.d(标记“onFailure:+throwable.getMessage());
}
});
}
代码在“InvokeApi”行函数中失败,在警告我将从移动设备连接到Internet之前抛出异常

另一件我认为可能是错误的事情是,Azure Get Sas Token函数中没有任何地方指定我的帐户凭据(我没有开发该函数,但应该可以正常工作,它无论如何不允许您更改任何内容,通过GitHub导入)

我在这类事情上的基础/背景很小,我肯定我错过了一些东西(或“很多”),但我真的很感激你的帮助,这让我发疯

警察局。清单中已授予Internet权限

提前感谢大家,在跟踪多年后,第一次在StackOverflow发布