怎么获取oss文件object的uri

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么获取oss文件object的uri相关的知识,希望对你有一定的参考价值。

1、进入OSS 管理控制台界面。

2、在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。

3、单击文件管理页签。

4、单击目标文件的文件名,打开该文件的预览页面。

5、复制文件URL:用于下载文件。

6复制文件路径:用于搜索文件或者给图片类的文件加水印功能等。

7、单击复制文件URL获取文件链接给访问者进行浏览或者下载。

OSS文件的断点上传与下载

一、断点下载

所谓断点下载,就是要从文件已经下载的地方开始继续下载。为了方便理解,我们先来看一个从OSS下载一个文件保存到本地的Python例子。

在这个例子 【注:为了便于理解,本文的代码实例忽略了一些简单的出错处理以及极端情况的判断逻辑】中,我们从一个名为“lingyun”的bucket里面,下载一个叫“example.dat”的文件,并且以相同名字保存在当前目录。

基于上面的代码,下面的程序显示了增加断点续传功能的文件下载代码,变化的地方用绿颜色标注出来了:

这段代码和前段代码相比,有四处发生了变化:

1、增加了流式写入本地文件的逻辑。防止下载的数据对象过大,无法一下子读入本地的内存中。

2、向OSS发送数据前,获取本地文件长度。

3、构造HTTP的Range Header,要求OSS从指定的位置开始下载。

4、判断OSS返回的HTTP值,并做出相应的处理:如果OSS返回206,说明下载的是指定位置范围内的数据;其他状态码表明“Range”参数错误或者发生异常。

二、注意事项

1、Range参数中的文件位置是从0开始,最大值是文件长度减1

2、如果Range参数填写错误,OSS将忽视这个参数【注:如果其他参数都合法,这个请求将符合get object请求的语法,OSS会返回整个object的内容,而不是用户期望的部分数据。】。

3、Range参数设置正确的话,OSS将返回HTTP状态码206(不是200)以表示返回的是部分数据。

4、通过“Range”参数,还可以实现大文件的并发下载。

三、断点上传

相对于断点下载,断点上传的实现显然要复杂得多。

OSS提供的解决办法可以理解为:在客户端将大文件切分成若干适合公网传输的小数据块;然后将这些小数据 块分别上传到OSS上;最后在OSS服务器端将这些小数据块合并成最终的文件。

1、 Initiate Multipart Upload:初始化一个Multipart Upload事件。

2、 Upload Part:上传数据块。

3、 Complete Multipart Upload:完成一个Multipart Upload事件。

4、 Abort Multipart Upload:中止一个Multipart Upload事件。

5、 List Multipart Uploads:列出所有存在的Multipart Upload事件。

6、 List Parts:列出某个Multipart Upload事件下的所有数据块。

7、这套接口中定义了两个唯一识别码(UUID):Upload ID和Part ID,分别用于标识某个Multipart Upload上传事件和某个数据块。一个完整的Multipart上传过程由以下几步组成:

1、Initiate Multipart Upload: 初始化一个Multipart Upload事件

2、客户端通知OSS要上传一个大文件,OSS返回给客户端一个唯一标识这次Multipart上传事件的Upload ID。

参考技术A

前段时间正好做个项目,就是用的oss,普通上传和断点续传,代码贴出来,看是不是你需要的

public class OssManage 
    public static  String ACCESS_KEY_ID  = null;
    public static  String  ACCESS_KEY_SECRET = null;
    public static  String  ENDPOINT = null;
    public static  String  BUCKETNAME = null;
    public static  String  BUCKETNAME_VIDEO = null;
    public static String OUT_OF_DATE = null;
    private  OSSClient client  = null;
    private  ObjectMetadata meta = null;
    static
        try 
            ACCESS_KEY_ID  = SysConst.getProperty("OSS_ACCESS_KEY_ID");
            ACCESS_KEY_SECRET = SysConst.getProperty("OSS_ACCESS_KEY_SECRET");
            ENDPOINT = SysConst.getProperty("OSS_ENDPOINT");
             BUCKETNAME = SysConst.getProperty("OSS_BUCKETNAME");
             BUCKETNAME_VIDEO = SysConst.getProperty("OSS_BUCKETNAME_VIDEO");
             OUT_OF_DATE = SysConst.getProperty("OSS_OUT_OF_DATE");
         catch (java.lang.Exception e) 
            e.printStackTrace();
        
    
     
    public void init()
         // 初始化一个OSSClient
            client = new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);
            meta = new ObjectMetadata();
    
     
    /**
     * @Description: 上传文件到OSS文件服务器
     * @param content  文件流
     * @param key    上传为OSS文件服务器的唯一标识
     * @param mimeType  文档类型
     * @throws Exception 
     * @ReturnType:String   OSSObject的ETag值。
    */
    public String  uploadFile(InputStream content,String key,String mimeType) throws Exception
        //进行初始化
        init();
            // 必须设置ContentLength
            meta.setContentType(mimeType);
            // 上传Object.
            LogUtil.printConsoleLog("*****************上传图片到oss服务器开始*****************" + key);
            PutObjectResult result = client.putObject(BUCKETNAME, key, content, meta);
            LogUtil.printConsoleLog("*****************上传图片到oss服务器结束*****************" + key);
            return result.getETag();
    
     
 
 
    /**
     * @Description: 根据key获取oss服务器上的图片地址
     * @param key
     * @return 
     * @ReturnType:String
    */
    public String getImgURl(String key)
        init();
        Date expires = new Date (new Date().getTime() + Integer.parseInt(OUT_OF_DATE)); // 30 minute to expire
        GeneratePresignedUrlRequest generatePresignedUrlRequest ;
        if(key.startsWith("msplatform"))
            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);
        else 
            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);
        
        generatePresignedUrlRequest.setExpiration(expires);
        URL url = client.generatePresignedUrl(generatePresignedUrlRequest);
        return url.toString();
    
    /**
     * @Description:根据key获取oss服务器上的ipa文件地址
     * @param key
     * @return 
     * @ReturnType:String
     */
    public String getIpaURl(String key)
        init();
        Date expires = new Date(new Date().getTime()+ 10*365*24*3600*1000);
        GeneratePresignedUrlRequest generatePresignedUrlRequest ;
        if(key.startsWith("msplatform"))
            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);
        else 
            generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);
        
        generatePresignedUrlRequest.setExpiration(expires);
        URL url = client.generatePresignedUrl(generatePresignedUrlRequest);
        return url.toString();
    
     
    /**
     * @Description: 根据key获取oss服务器上的图片地址
     * @param key
     * @return 
     * @ReturnType:String
    */
    public InputStream  getObject(String key)
        init();
        OSSObject object = null;
        if(key.startsWith("msplatform"))
            object= client.getObject(BUCKETNAME, key);
        else
            object= client.getObject(BUCKETNAME_VIDEO, key);
        
        object.getObjectMetadata().getContentType();
        // 获取Object的输入流
        InputStream objectContent = object.getObjectContent();
         
     
        return objectContent;
    
     
     
    /**
     * @Description:删除文件
     * @param key  OSS文件服务器上文件的唯一标识
     * @ReturnType:void
    */
    public void deleteFile(String key)
        init();
        client.deleteObject(BUCKETNAME, key);
    
     
     
    /**
     * @Description: 断点上传文件到OSS文件服务器
     * @param content  文件流
     * @param key    上传为OSS文件服务器的唯一标识
     * @param position 位置
    */
    public String  appendObjectFile(InputStream content,String key,int position,String mimeType) throws Exception
           //进行初始化
            init();
            // 必须设置ContentLength
            meta.setContentLength(position);
            meta.setContentType(mimeType);
            meta.setCacheControl("no-cache");
            meta.setContentEncoding("utf-8");
            // 上传
            LogUtil.printConsoleLog("*****************断点上传图片到oss服务器开始*****************" + key);
            AppendObjectRequest appendObjectRequest = new AppendObjectRequest(BUCKETNAME, key, content, meta);
            appendObjectRequest.setPosition(Long.valueOf(position));
            AppendObjectResult appendObjectResult =client.appendObject(appendObjectRequest);
            LogUtil.printConsoleLog("*****************断点上传图片到oss服务器结束*****************" + key);
            return appendObjectResult.getNextPosition().toString();
    
     
    public static void main(String[] args) 
        OssManage ossManage = new OssManage();
    

javascript 上传文件到阿里云的oss,上传文件成功后怎么获取文件的真实路径?

javascript 上传文件到阿里云的oss,上传文件成功后怎么获取文件的真实路径?
用js获取,不是在控制台看。

如果你直接使用 javascript 将阿里云的accessId、accessKey写在页面上是不安全的,你可以使用后台存储这些敏感的信息,官网有相关的SDK ,你可以选择你常用的。

我使用的Java

流程:首先先访问你的后台获取到相关的凭证,将凭证携带发送到你的OSS,如果你要调用回调函数,在你的后台需要开启回调函数功能,

在后台编写你的回调函数,将回调函数凭证信息返回给前端,前端使用回调函数凭证访问OSS,就可以获取到回调函数信息。

参考技术A 你好,我是阿里云大使,提供新手上云支持,可以回答你此问题(非官方),仅以我的5年使用经验为依托。

首先,注意安全问题,js运行在客户端,能上传oss意味着你会泄漏密钥等信息,会早于流量风险,请尽量规避
其次,oss的文件读写都要放在服务端实现,oss帮助文档中有多种语言的sdk,直接使用sdk即可。本回答被提问者和网友采纳

以上是关于怎么获取oss文件object的uri的主要内容,如果未能解决你的问题,请参考以下文章

oss 阿里云 web上传文件后怎样获取路径

javascript 上传文件到阿里云的oss,上传文件成功后怎么获取文件的真实路径?

请教阿里云 OSS 使用方法

阿里云 oss 文件下载进度显示

阿里云OSS怎么接到dede去

Spring Boot获取oss前端下载签名