从上载的不同机器下载时,Azure加密的blob下载结果为空

时间:2016-09-21 12:59:49

标签: azure azure-storage azure-storage-blobs

我已将文本blob上传到azure存储(使用UploadTextASync)。一切都很好,甚至在同一个工作站上再次下载。 问题是当我尝试从其他服务器(阶段)下载它时:

  • 对blob.ExistsAsync的调用报告blob在那里;
  • 对blob.DownloadTextAsync的调用返回空字符串

设定:

  • 上传的文字是html,UTF8编码;
  • 上传使用BlobRequestOptions和从CachingKeyResolver获取的IKey,后者在密钥库中生成密钥;
  • 下载使用BlobRequestOptions和CachingKeyResolver获取相同的密钥

到目前为止检查过的事情:

  • blob连接字符串在本地和舞台服务器之间是相同的;
  • 密钥保管库名称,客户端ID,客户端密码和blob网址在本地和舞台服务器之间都是相同的;
  • 将WindowsAzure.Storage更新为最新版本(7.2.1),即使使用旧版本(6.2.0)的行为也相同;
  • 加密机制正在同一项目中成功使用(上传/下载八位字节流);唯一的区别在于使用的方法

回顾:

  • 从其他计算机调用时,DownloadText(及其异步方法)返回空字符串

代码:

 public async Task<bool> UploadTextAsync(UploadTextBlobParameter parameter)
    {
        var container = await EnsureBlobContainerAsync(parameter);
        var blob = container.GetBlockBlobReference(parameter.Path);
        var blobRequestOptions = await _blobRequestOptionsManager.GetUploadBlobRequestOptions().ConfigureAwait(false);

        var exists = await blob.ExistsAsync(blobRequestOptions, null).ConfigureAwait(false);
        if (!parameter.Overwrite && exists)
        {
            return false;
        }

        await blob.UploadTextAsync(parameter.InputStream, parameter.Encoding, null, blobRequestOptions, null).ConfigureAwait(false);
        return true;
    }

    public async Task<string> DownloadTextAsync(DownloadTextBlobParameter parameter)
    {
        var container = await EnsureBlobContainerAsync(parameter);
        var blob = container.GetBlockBlobReference(parameter.Path);
        var blobRequestOptions = _blobRequestOptionsManager.GetDownloadBlobRequestOptions();

        var exists = await blob.ExistsAsync(blobRequestOptions, null).ConfigureAwait(false);
        if (exists)
        {
            return await blob.DownloadTextAsync(parameter.Encoding, null, blobRequestOptions, null).ConfigureAwait(false);
        }

        return null;
    }

提前致谢!

0 个答案:

没有答案