阿里云oss如果是私有的图片,获取的时候能不能获取处理的图片?

阿里云oss如果是私有的图片,获取的时候能不能获取处理的图片,原图太大,能不能获取缩略图。

获取前面得url之后在后面添加图片处理参数,不可以?x-oss-process=image/resize,h_100,m_lfit

还是说私有的只能获取原图

阅读 622
2 个回答

你可以看看阿里的官方文档,你在生成签名时把参数加上就行

SDK处理方法,以go版本为例:

package main

import (
    "fmt"
    "os"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func HandleError(err error) {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

func main() {
    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
    if err != nil {
    HandleError(err)
    }

    // 指定图片所在Bucket的名称,例如examplebucket。
    bucketName := "examplebucket"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
    HandleError(err)
    }
    // 指定图片名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。
    ossImageName := "exampledir/example.jpg"
    // 生成带签名的URL,并指定过期时间为600s。
    signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 600, oss.Process("image/format,png"))
    if err != nil {
    HandleError(err)
    } else {
    fmt.Println(signedURL)
    }
}

其中,yourAccessKeyId,yourAccessKeySecret的来源参考该文,阿里云OSS上传报错: You have no right to access this object because of bucket acl。创建完用户需要创建AccessKeyId,接着就可以创建yourAccessKeyId和AccessKeySecret。 最后会生成完整的图片链接,注意,如果发现链接中多出了bucket,需要排查yourEndpoint是否已经加上了bucket,需要删除掉。

image.png
https://help.aliyun.com/zh/oss/user-guide/img-implementation-...

很遗憾,阿里云OSS私有Bucket只能获取原图,官方没有提供参数式的实时处理: 包括它的SDK、OssUtil都不支持。

明白你的需求,你想:低成本的展示预览图(小图),需要的时候再下载原图。
阿里云的实现是在Oss和用户中间加了一层预处理层,你也可以按照这个思路来,并且兼容阿里云的参数语法, 如果是nodejs开发可以考虑使用 sharp 这个图像库,能满足所有常见网络图片处理需求。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏