php 怎么从oss上调用文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 怎么从oss上调用文件相关的知识,希望对你有一定的参考价值。
直接把oss图片地址放到img标签的src里就可以了.如果设置的对应的域名 就可以直接替换成这个域名. 参考技术A 根据路径调怎么获取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 OssManagepublic 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();
以上是关于php 怎么从oss上调用文件的主要内容,如果未能解决你的问题,请参考以下文章