开发者社区> 问答> 正文

OSS图片服务上传图片

我想问可以就用官方的上传案例可以用到项目中么??上面说不太健壮。。 OSSClient是写个单例还是每次都new一个出来??
app 上传到 后台, 后台再上传到 OSS, 好像很慢,光后台到OSS,一个300K的都要5,6s ,我不知道用ECS 传到 OSS 是不是相当于在内网传输,我用的是公司电脑测的,很慢??
求高手指点迷津!!!谢谢


上传方法:
public static void uploadFile(String bucketName, String key , File file)
            throws OSSException, ClientException, FileNotFoundException {


        OSSClient client = new OSSClient(ACCESS_ID, ACCESS_KEY);
        ObjectMetadata objectMeta = new ObjectMetadata();
        objectMeta.setContentLength(file.length());
        // 可以在metadata中标记文件类型
        objectMeta.setContentType("image/jpeg");
        InputStream input = new FileInputStream(file);
        client.putObject(bucketName, key, input, objectMeta);
}

展开
收起
memeda 2014-12-12 09:36:19 17064 0
8 条回答
写回答
取消 提交回答
  • 阿里云对象存储(OSS)开发工程师
    回9楼ajcode的帖子
    其实就是将object名称扩展@100w_100h.jpg,其他不变,你使用java里面的下载demo,将object名称后面加上"@100w_100h.jpg"就可以了

    -------------------------

    回11楼ajcode的帖子
    要注意的是,上传的endpoint要使用oss的域名,比如oss-cn-hangzhou.aliyuncs.com,访问的时候除了加上@100w_100h.jpg外,还需要将endpoint使用你绑定图片服务的域名

    -------------------------

    回10楼xgp的帖子
    这个是生成缩略图的java代码,你将endpoint、bucket等设置成你实际的值就可以了

    @Test
       public void testPutAndGet() {
          final String OSS_ENDPOINT = "oss-cn-beijing.aliyuncs.com";
          final String IMG_ENDPOINT = "img-cn-beijing.aliyuncs.com";
           final String ACCESS_KEY_ID = "** Provide your access key id **";
           final String ACCESS_KEY_SECRET = "** Provide your access key id **";;
          
           String bucketName = "jy-bj-img";
           String key = "example.jpg";
           String filePath = "D:\\pic\\example.jpg";
           String downloadPath = "D:\\pic\\ example@100w.jpg";
          
           try {  
              OSSClient client4oss = new OSSClient(OSS_ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
              client4oss.putObject(bucketName, key, new File(filePath));
              System.out.println("upload " + key + " succeed");
              
              OSSClient client4img = new OSSClient(IMG_ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
              GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key + "@100w");
              client4img.getObject(getObjectRequest, new File(downloadPath));
              System.out.println("down " + key + "@100 succeed");
           } catch (OSSException oe) {
              System.out.println(oe.getMessage());
           } catch (Exception e) {
              System.out.println(e.getMessage());
           }
       }
    2015-10-28 13:41:26
    赞同 展开评论 打赏
  • ReOSS图片服务上传图片
    实现缩略图求代码  

    -------------------------

    回8楼shinenuaa的帖子
    能用java实现吗,api中这段是Python的实现,java中这样拼起来的不解析
    2015-10-27 18:03:04
    赞同 展开评论 打赏
  • 回 5楼(xiuqi0844) 的帖子
    生成缩略图,只能在下载时指定

    -------------------------

    回 7楼(ajcode) 的帖子
    bucket = 'image-demo'
    object = 'example.jpg'
    query = '100w_100h.jpg'
    object = object + '@' + query
    self.oss.get_object(bucket, object)
    2015-06-16 10:56:02
    赞同 展开评论 打赏
  • ReOSS图片服务上传图片
    请问,Java OSS 上传图片 生成缩略图怎么实现?有代码最好
    2015-06-12 17:51:58
    赞同 展开评论 打赏
  • 回3楼lingxia的帖子
    请问这个临时URl 怎么获取??
    2015-03-06 18:01:45
    赞同 展开评论 打赏
  • ReOSS图片服务上传图片
    个人认为把ID和SECRET放在客户端是非常不安全的做法,如果用户通过反编译或其他办法拿到Key和ID,那结果是灾难性的。
    我个人的做法是,把ID和SECRET存放在ECS动态内容服务器上,当用户要请求上传的时候,先从ECS上拿到与文件对应的带有签名信息的临时上传URL,然后客户端拿着这个URL直接给OSS上传文件,上传完毕后再反馈给动态服务器确认相应内容,这样做既安全,又节省了动态服务器的外网带宽
    2015-01-18 22:29:45
    赞同 展开评论 打赏
  • ReOSS图片服务上传图片
    兄弟 你上传上去的图片在管理控制台看到的文件类型有么?为啥我上传上去没显示"JPG"
    2015-01-16 14:37:06
    赞同 展开评论 打赏
  • 回 楼主(memeda) 的帖子
    如果是使用new OSSClient肯定会创建一个新的client出来。如果使用ECS上传到OSS,只要是上传到和ECS同区域的OSS可以使用OSS内网域名,这个时候是走内网,上传稳定性和带宽要好于直接从公网上传。
    2014-12-15 11:41:56
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载