zoukankan      html  css  js  c++  java
  • 使用Azure Storage API 上传 文件解决微信小程序中上传图片的问题

    本文介绍:

    使用Azure Storage Rest API 上传文件。

    背景:

    某微信小程序应用每天要上传海量图片,如果直接将图片上传到服务器,则可能收到服务器带宽限制导致并发数受限制。

    Azure Storage Account 为每个文件提供了据说“40MB/S”的带宽(此数据来源于网络仅供参考,未从微软官网找到相关数据),如果小程序的上传图片直接上传到Azure Storage Account 则可以大幅降低服务器的带宽压力。

    两种方案供参考:

    方案 一:

    在小程序中调用Azure Storage Account 的JS SDK 上传文件,因为我手里没有微信小程序可供测试,故不确定是否可行(似乎小程序对第三方JS有些特定的要求)。

    Azure Storage Account JS SDK下载地址:

    https://docs.microsoft.com/zh-cn/azure/storage/blobs/quickstart-blobs-javascript-browser?WT.mc_id=AZ-MVP-5003757

    方案二:

    在小程序中直接调用Azure Storage Account 的REST API 中的PUT请求直接上传文件:

    需要使用SAS:

    设定CORS:

    在PostMan中模拟如下:

    PUT请求,Header中增加x-ms-blob-type:BlockBlob,URL为:

    https://{StorageAccount_Name}.blob.core.windows.net/{container_name}/{blob_name}?{sas}

    body 设定如下:


    如果需要动态生成sas,则可参照如下连接:

    https://docs.microsoft.com/zh-cn/azure/storage/common/storage-account-sas-create-dotnet?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&WT.mc_id=AZ-MVP-5003757

    示例代码如下:

    private static string GetAccountSASToken(StorageSharedKeyCredential key)
    {
        // Create a SAS token that's valid for one hour.
        AccountSasBuilder sasBuilder = new AccountSasBuilder()
        {
            Services = AccountSasServices.Blobs | AccountSasServices.Files,
            ResourceTypes = AccountSasResourceTypes.Service,
            ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
            Protocol = SasProtocol.Https
        };
    
        sasBuilder.SetPermissions(AccountSasPermissions.Read |
            AccountSasPermissions.Write);
    
        // Use the key to get the SAS token.
        string sasToken = sasBuilder.ToSasQueryParameters(key).ToString();
    
        Console.WriteLine("SAS token for the storage account is: {0}", sasToken);
        Console.WriteLine();
    
        return sasToken;
    }

    小程序要求使用 https 及 ICP备案:

    可参照如下连接对Azure Storage 进行非https的自定义域名设置(这种设置小程序不能使用):

    上传完成后,可以使用默认的主终结点访问网站:

    设置域名解析

    本例中我们将设置将storage.5gn.link CNAME到 storage account 的默认uri。

    登录域名控制台,本例中我们的域名在阿里云, 添加CNAME记录:

    添加自定义域

    使用自定义域测试成功:

    注意,此时只能选择http方式,同样创建sas时也要选择 支持 http 和 https

    开启带HTTPS的自定义域名

    对于开启HTTPS,则稍微复杂,必须开通CDN服务才可以为Azure Storage 开启https:

    设置一些名称等必备参数:

    在域名供应商处设置cname解析:

    cname值在cdn页面可以看到:

     如下页面开启 https:

    global版本Azure 可以由Azure CDN自动托管证书。国内版本暂时不支持。

    等待一会全部部署完成:

    完成后,显示https 成功:

    部署完成后,可以在postman中测试:

    注意此时的域名要使用 cdn.5gn.link:

    特别注意:

    由自定义域名设定的域名只能使用http协议

    由Azure CDN设定的域名可以使用 http和https协议

    二者互不干涉,关闭自定义域名Azure CDN仍然可以运行。

    using postman upload files to Azure storage Blob





    声明:

    点击可查阅本站文章目录 《文章分类目录》

    本站所有内容仅代表个人观点,如与官文档冲突,请以官方文档为准。

    可在本页面下方留言或通过下方联系方式联系我:

    微信:wxyusz;邮箱:shuzhen.yu@foxmail.com

    欢迎关注公众号“云计算实战”,接收最新文章推送。



    知识共享许可协议

    本作品由Sean Yu 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
    欢迎转载、使用、重新发布,但务必保留文章链接:https://www.51azure.cloud,且不得用于商业目的。

  • 相关阅读:
    Synchronized和Lock的实现原理和锁升级
    如何禁止CPU指令重排
    MESI缓存一致性
    归并排序
    强软弱虚四种引用和ThreadLocal内存泄露
    VINS-Mono代码分析与总结(完整版)
    IMU误差模型与校准
    小感
    K8S conul部署
    Centos Consul集群及Acl配置
  • 原文地址:https://www.cnblogs.com/shuzhenyu/p/14519164.html
Copyright © 2011-2022 走看看