V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jorneyr
V2EX  ›  编程

阿里云 OSS 使用 Java SDK 上传很慢

  •  
  •   jorneyr · 2019-11-09 23:06:23 +08:00 · 5799 次点击
    这是一个创建于 1830 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想使用阿里云 OSS 存储图片,本地同样的环境下上传 4M 的图片到 OSS,按照帮助文档里的代码实现上传:

    • 使用 Java SDK 上传需要 7 秒左右,有人说默认开启了 CRC 校验,关闭 CRC 检验后速度提高很多,测试过关闭 CRC 校验没什么变化
    • 使用 PHP SDK 上传这个文件只需要 2 秒左右

    PHP 2 秒上传完成感觉速度是正常的,说明不是本地网络慢导致的,不知道 Java 版做了什么设置导致这么慢,经过多次反复测试时间都没什么变化,大家有遇到过这个情况吗,帮忙看看什么是原因导致的?

    Java 代码:

    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.model.PutObjectRequest;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    
    /**
     * 上传文档: https://help.aliyun.com/document_detail/32013.html?spm=a2c4g.11186623.3.4.3ac339a5K0c1T7
     * 简单上传: https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.2.7.218d59aa5mAief#concept-84781-zh
     */
    public class AliOss {
        public static void main(String[] args) throws FileNotFoundException {
            long start = System.currentTimeMillis();
            System.out.println("Start: " + start);
    
            // [1] Endpoint 以杭州为例,其它 Region 请按实际情况填写
            // [2] 阿里云主账号 AccessKey 拥有所有 API 的访问权限,风险很高
            String endpoint = "oss-cn-beijing.aliyuncs.com";
            String accessKeyId = "xxx";
            String accessKeySecret = "xxx";
    
            // [3] 创建 OSSClient 实例
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            // [4] 创建 PutObjectRequest 对象
            String filename =  System.currentTimeMillis() + ".jpg";
            PutObjectRequest putObjectRequest = new PutObjectRequest("biaomac", filename, new File("/Users/Biao/Pictures/storm.jpg"));
    
            // [6] 上传文件
            ossClient.putObject(putObjectRequest);
    
            // [7] 关闭 OSSClient
            ossClient.shutdown();
    
            // [8] 输出访问文件的 URL
            // URL 为 Bucket 域名 biaomac.oss-cn-beijing.aliyuncs.com 加上文件名字,
            // 如 https://biaomac.oss-cn-beijing.aliyuncs.com/avatar.jpg
            System.out.println("https://biaomac.oss-cn-beijing.aliyuncs.com/" + filename);
            System.out.println("End: " + (System.currentTimeMillis() - start));
        }
    }
    
    

    PHP 代码:

    <?php
    require_once __DIR__ . '/autoload.php';
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    $endpoint = "oss-cn-beijing.aliyuncs.com";
    $accessKeyId = "xxx";
    $accessKeySecret = "xxx";
    
    try {
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
        $content = file_get_contents('/Users/Biao/Pictures/storm.jpg');
        $options = array();
        $ossClient->putObject('biaomac', 'img/1.jpg', $content, $options);
    } catch (OssException $e) {
        print $e->getMessage();
    }
    ?>
    
    
    6 条回复    2019-11-10 09:16:20 +08:00
    opengps
        1
    opengps  
       2019-11-09 23:10:41 +08:00
    这俩语言我都没用熟练,我用 .net 版本上传还是很快的。你可以试试在不同位置打印时间戳日志,分析下具体满在哪一步。重点是那句执行上传的代码的前后要加上时间戳打印,对比这句代码消耗时间的差异
    akira
        2
    akira  
       2019-11-09 23:17:30 +08:00
    1234567 都输出下日志 看看时间消耗是在哪一步
    jorneyr
        3
    jorneyr  
    OP
       2019-11-10 06:37:00 +08:00
    上传文件 ossClient.putObject(putObjectRequest) 这一句花了 6 秒多,其他的地方都正常
    jorneyr
        4
    jorneyr  
    OP
       2019-11-10 07:07:04 +08:00
    谢谢大家,最后一步一步的 Debug,发现是 ServiceSignature.sign 中获取摘要算法 Mac.getInstance("HmacSHA1") 这一句慢,是系统原因,在 hosts 中增加了 127.0.0.1 localhost Biao.local 后就快了,最后 4M 的文件 1.6 秒就传完了。
    uglyer
        5
    uglyer  
       2019-11-10 08:41:37 +08:00 via iPhone
    为什么不走内网的 endpoint
    jorneyr
        6
    jorneyr  
    OP
       2019-11-10 09:16:20 +08:00
    @uglyer 我们有的服务器不是阿里云的,有金山云,有机房托管的,还有的需要直接从客户端上传到阿里云,然后使用百度的 API 进行人脸识别,所以不能统一都走阿里云内网。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5816 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:21 · PVG 14:21 · LAX 22:21 · JFK 01:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.