你可以试试通过一下 *** 作步骤:
输入文件上传到OSS。(多种上传方案:OSS控制台上传,使用OSS相关上传工具上传,上传SDK)。
设置管道消息队列通知。
提交转码任务。
在获取到消息后,调用“查询转码作业”接口查询作业执行结果,获取输出文件URL。
通过URL播放视频。
拓展:API:Application Programming Interface(应用编程适配器), 语言、框架以及类库对外提供的编码的适配器。
项目需要上传头像,不想存在本地,之前用过阿里云其他产品,这里就使用一下阿里云的oss了,不得不说阿里云的产品使用步骤真的很清晰这里说一下我自己的使用步骤
选择对象存储oss,进行开通
开通不要钱,有一定免费额度
权限可以设置为公共读
其实也就是两步
1引pom
2复制黏贴大法
由于阿里云一些密钥配置和地域结点,bucket等是常量级的,所以我这里抽取出来放在了applicationproperties中, 方便管理 ,数据我手动加密了大家换成自己的即可,
这些配置key=value key都是自己随便写的(也不是,起码可以见名思意),只是为了我们配置的一个配置类可以利用spring的依赖注入填充value而已
说明:
说明:
我们阿里云oss仓库的url是一个咱们的仓库+固定的地域结点值+咱们的文件名字,所以这里为了使上传的文件名字不重复,使用了一个idworker,不知道的可以看一下 Twitter的 Snowflake(雪花算法)
大家搭建完了可以用postman测试一下
ps:如果我们想方便管理或者后期扩展,我们这里也可以引入一个工具
我们可以用这个工具的一个方法String dirpath=new DateTime()tostring("yyyy/MM/dd");将当前的时间转换为yyyy/MM/dd的格式,比如2020/02/03
这样我们上传的文件名字时候可以以这个dirpath作为我们的所在的文件夹名称,以分布式id生成器生成的id为名称存储
下面看一下效果
随着网站运作,难免有些时候需要上传文件。上传文件自然是上传到网站所在的服务器,日积月累,慢慢地网站存储空间越来越少。而且网站迁移和备份都不方便,使用这些资源时也占用大量服务器流量。
较好的解决方案是使用第三方存储服务器,例如七牛、阿里云OSS、亚马逊S3等。将文件都放到这些存储服务器,可以减少服务器负担。服务器只剩下必要的静态文件和代码。
以阿里云OSS为例,讲解如何使用第三方存储服务器。(刚好最近用到这个,而且Django有其他人写好的第三方库)
首先,需要拥有OSS。这个去阿里云购买即可。购买之后可得到密钥等一系列信息。
接着,安装oss2库,该库是Python对应oss的 *** 作库。
再安装或下载Django OSS的Storage库。这些库是继承Django的Storage类,并重写相关方法。Django的Stroage是管理上传文件的存储。如何自定义Storage可参考Django官方文档。
执行如下命令,安装Django-Aliyun-OSS2-Storage:
也可以不用pip安装,打开该第三方库的Github,下载源码到本地。这里我需要修改部分代码,所以直接下载把整个包放到Django项目的根目录(也可其他位置)。
安装下载完成之后,配置Django的Settings,添加如下设置:
另外,还有两个对应参数需要注意一下,MEDIA_ROOT和MEDIA_URL。
MEDIA_ROOT是媒体文件的上传位置根目录,由于设置了BUCKET_NAME,一般在这个bucket中。可以设置为空字符串。
文件自然上传到Django模版的FileField字段设置的upload_to位置。
MEDIA_URL是获取媒体文件的链接前缀,可根据自己的oss文件链接位置添加。
由于上传的文件需要开放被用户下载,BUCKET_ACL_TYPE设置为公共的。若你的静态文件也需要上传到OSS中,设置如下:
设置无误后,重启Django即可使用。上传文件将自动上传到OSS中。
上面提到我要修改里面的源码。因为发现上传的文件在下载时的文件名是一串乱码,不是上传时的文件名。这个需要设置一些header信息,可参考OSS的SDK文档。该header需要在上传文件时就提交,而上面的django-aliyun-oss2-storage在上传文件时没有写入header信息。
打开该包的源码文件backendspy,找到AliyunBaseStorage类的_save方法。修改如下:
这样设置,点击文件链接,即可下载并且下载文件名是上传的文件名。若你不是什么类型文件都需要这么处理,可以判断filename的后缀名加以处理。
阿里oss提供了两种上传方式到云存储一种是在 Header中包含签名 ,一种是 在URL中包含签名 。区别如下
最终的fileResult就是XML>
参考:
>
前段时间正好做个项目,就是用的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 = SysConstgetProperty("OSS_ACCESS_KEY_ID");ACCESS_KEY_SECRET = SysConstgetProperty("OSS_ACCESS_KEY_SECRET");ENDPOINT = SysConstgetProperty("OSS_ENDPOINT"); BUCKETNAME = SysConstgetProperty("OSS_BUCKETNAME"); BUCKETNAME_VIDEO = SysConstgetProperty("OSS_BUCKETNAME_VIDEO"); OUT_OF_DATE = SysConstgetProperty("OSS_OUT_OF_DATE");} catch (javalangException e) {eprintStackTrace();}}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 metasetContentType(mimeType); // 上传Object LogUtilprintConsoleLog("上传到oss服务器开始" + key); PutObjectResult result = clientputObject(BUCKETNAME, key, content, meta); LogUtilprintConsoleLog("上传到oss服务器结束" + key); return resultgetETag();}/ @Description: 根据key获取oss服务器上的地址 @param key @return @ReturnType:String/public String getImgURl(String key){init();Date expires = new Date (new Date()getTime() + IntegerparseInt(OUT_OF_DATE)); // 30 minute to expireGeneratePresignedUrlRequest generatePresignedUrlRequest ;if(keystartsWith("msplatform")){generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);}else {generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);}generatePresignedUrlRequestsetExpiration(expires);URL url = clientgeneratePresignedUrl(generatePresignedUrlRequest);return urltoString();}/ @Description:根据key获取oss服务器上的ipa文件地址 @param key @return @ReturnType:String /public String getIpaURl(String key){init();Date expires = new Date(new Date()getTime()+ 103652436001000);GeneratePresignedUrlRequest generatePresignedUrlRequest ;if(keystartsWith("msplatform")){generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME, key);}else {generatePresignedUrlRequest =new GeneratePresignedUrlRequest(BUCKETNAME_VIDEO, key);}generatePresignedUrlRequestsetExpiration(expires);URL url = clientgeneratePresignedUrl(generatePresignedUrlRequest);return urltoString();}/ @Description: 根据key获取oss服务器上的地址 @param key @return @ReturnType:String/public InputStream getObject(String key){init();OSSObject object = null;if(keystartsWith("msplatform")){object= clientgetObject(BUCKETNAME, key);}else{object= clientgetObject(BUCKETNAME_VIDEO, key);}objectgetObjectMetadata()getContentType();// 获取Object的输入流InputStream objectContent = objectgetObjectContent();return objectContent;}/ @Description:删除文件 @param key OSS文件服务器上文件的唯一标识 @ReturnType:void/public void deleteFile(String key){init();clientdeleteObject(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 metasetContentLength(position); metasetContentType(mimeType); metasetCacheControl("no-cache"); metasetContentEncoding("utf-8"); // 上传 LogUtilprintConsoleLog("断点上传到oss服务器开始" + key); AppendObjectRequest appendObjectRequest = new AppendObjectRequest(BUCKETNAME, key, content, meta); appendObjectRequestsetPosition(LongvalueOf(position)); AppendObjectResult appendObjectResult =clientappendObject(appendObjectRequest); LogUtilprintConsoleLog("断点上传到oss服务器结束" + key); return appendObjectResultgetNextPosition()toString();}public static void main(String[] args) {OssManage ossManage = new OssManage();}}
以上就是关于api文件怎么解码全部的内容,包括:api文件怎么解码、小白使用阿里云的oss实现文件云存储、Django上传原理求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)