• 关于 获取文件后缀 的搜索结果

问题

例如.txtreg这样后缀的文件传到OSS后获取的地址是查看不是下载!

咿呀兜兜 2019-12-01 21:52:43 4869 浏览量 回答数 3

问题

PHP中如何通过unpack来准确获取文件格式?

落地花开啦 2019-12-01 19:57:36 1506 浏览量 回答数 1

回答

问题原因 程序代码里面读取的公钥证书文件(app_cert_path)有误导致 解决方案 核实读取的公钥证书文件(app_cert_path)是否是在支付宝平台上下载的获取的,切勿使用工具生成的csr文件或TXT文件,获取的页面如下: 帖子图片30.png 注:获取到的公钥证书文件后缀为.crt,公钥证书文件可点击【查看】在接口加签方式这一栏点击设置/查看进行获取

保持可爱mmm 2020-05-05 16:26:59 0 浏览量 回答数 0

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

问题

php如何获取文件夹里所有avi文件?

小旋风柴进 2019-12-01 20:08:44 921 浏览量 回答数 1

回答

本节以 IDE 内的 Todo App 模板小程序为例,介绍支付宝小程序的文件结构, 以及每种文件类型在小程序中的作用。 Todo App 是一个简单的待办事项管理小程序,实现了用户登录、新增自定义待 办事项、划除或恢复待办事项的功能。 app.json app.json 是小程序的全局配置,用于配置小程序的页面列表、默认窗口标题、导 航栏背景色等。更多配置请参见 文档配置。 app.acss 定义了全局样式,作用于当前小程序的所有页面。 上例中的 page 为框架支持的特殊选择器,会匹配框架提供的页面根节点容器。 app.js app.js 用于注册小程序应用,可配置小程序的生命周期,声明全局数据,调用丰 富的 API,如以下获取用户授权及获取用户信息 API 等,更多 API 信息请参见 API 文档。 可以看到,全局的逻辑代码放在 App({})中,声明了全局数据 todos 、 userInfo ,以及全局方法 getUserInfo()。 todos 全局数据中已经存储了一些数据,即 Todo App 小程序中已有的一些待办 事项。 全局方法 getUserInfo() 调用了授权 API my.getAuthCode,以及获取用户信息 API my.getAuthUserInfo ,并将获取到的用户信息存储在 userInfo 中。 小程序页面 此示例中有两个页面,Todo List 页面和 Add Todo 页面,都位于 pages 目录 下。小程序的所有页面路径必须在 app.json 中申明,路径从项目根目录开始且 不能包括后缀名,pages 的第一个页面就是小程序的首页。 每一个页面 由同路径下的四种类型文件组成,即 .json 后缀的配置文件,.axml 后缀的模板文件,.acss 后缀的样式文件,.js 后缀的逻辑脚本文件。 todo List 页面 todos.json 用于配置当前页面的窗口表现。此处定义了使用一个自定义组件 add-button ,指定它的组件名称及对应的路径。自定义组件的具体使用后面会讲 述。 页面配置文件不是必须的。当存在页面配置文件时,各个页面配置项会优先于 app.json 中 window 的同名配置项。当不存在页面配置文件,则直接使用 app.json 中的默认配置。因此,Todo List 页面的标题为 app.json 中指定的 defaultTitle ,即 Todo App。 todos.axml 为页面结构模板文件。使用 ,, ,,, , 来搭建页面结构以及通过 Mustache 语法两对大括号({{}})绑定 todos 数据。  绑定数据请参见此文档  绑定事件请参见此文档 todos.js 是页面的逻辑脚本文件,小程序页面的逻辑代码必需包含在 Page({}) 中。在这个文件中可实现:  监听并处理页面的生命周期函数 onShow onLoad  获取小程序实例以及其他页面实例 getApp getCurrentPages  声明并处理数据 data  响应页面交互事件,调用 API 等  这里需要注意的是 app.todos 是来自 app.js 中全局的变量定义 todos.acss 定义页面局部样式。指定 todos.axml 中不同元素的样式,包括位 置、背景颜色、字体、字体颜色等。 ACSS 语法参见 样式 文档。页面的 .acss 文件不是必须的,但对于相同选择器,页面局部样式会覆盖 app.acss 全局样 式。 Add Todo 页面 add-todo.json 声明自定义组件名称和路径。 add-todo.axml 为页面结构模板文件。 此页面的两个核心功能为: 1. 使用 组件接收用户输入。 2. 是一个自定义组件,可将一些功能完整的代码封装为自定义组件,便于 在其他地方复用。 add-todo.js 为页面逻辑代码。add-todo.acss 同 todos.acss 用法一致,不再 赘述 内容来源:https://developer.aliyun.com/article/756818?spm=a2c6h.12873581.0.dArticle756818.26162b70Su1GZy&groupCode=tech_library

KaFei 2020-04-27 13:49:46 0 浏览量 回答数 0

回答

使用commo-fileupload.jar大概步骤 ServletFileUpload servletFileUpload; //设置储存目录 ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, 文件目录)); //设置大小 servletFileUpload.setSizeMax(uploadLimit * 1024 * 1024); Map> fileItemListMap = servletFileUpload.parseParameterMap(request); 通过FileItem.getName().getBytes("UTF-8"), "UTF-8"),获取文件名,包括后缀通过FileItem.getContentType(),获取内容类型

蛮大人123 2019-12-02 02:17:48 0 浏览量 回答数 0

问题

Android mediacodec解码.264 播放

爵霸 2019-12-01 19:41:54 1143 浏览量 回答数 2

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:50 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 虚拟主机目前可以通过网站搬家功能导入.bak格式SqlServer数据库备份文件到系统自带的SqlServer数据库,具体可以参考以下方法操作:在主机管理控制台>工具&服务>网站搬家,新建搬家任务对数据进行导入操作您需要先将.bak文件通过ftp上传到网站根目录中,之后点击浏览获取到数据库备份文件(目前只支持bak格式的sqlserver备份文件,文件后缀需要为.bak否则会报错“SQLServer数据库只支持设置完全备份的.bak文件”),再点击下一步进行导入。如问题还未解决,请联系售后技术支持

2019-12-01 23:20:50 0 浏览量 回答数 0

问题

如何实现图片原图保护?

青衫无名 2019-12-01 21:57:05 1852 浏览量 回答数 0

问题

钉钉文件下载问题

2019-12-01 21:30:23 3870 浏览量 回答数 2

回答

问题现象 ECS Windows2008系统服务器通过IIS搭建的网站,如果提供下载服务,有时传上去的文件比如 xxx.iso,用浏览器打开的时候却提示文件不存在;或者网站提供音视频的播放功能,有时一些格式的视频文件无法自动播放。 问题原因 这是由于IIS中没有配置相关文件的MIME类型,使得浏览器无法正确识别该文件。MIME是一种技术规范,现在可以用于浏览器上,传送可以供浏览器识别的信息。常见的有 mp4 / flv / iso / apk 等扩展名的文件,IIS本身是没有指定MIME类型的,这类文件默认在IIS里是不能下载(或播放)的。可以通过使用MIME以设置服务器传送多媒体文件,如声音和视频等。 解决方案 Windows 2003 通过IIS添加MIME类型操作步骤 1、登陆服务器在开始--管理工具中打开IIS管理器,鼠标右键点击您网站名称选择【属性】--点击【HTTP头】--点击【MIME类型】。 2、在新弹出的窗口点击新建,在扩展名输入框中输入.flv(注意扩展名前有点),在MIME类型(M):输入框输入flv-application/octet-stream,再按确定按钮完成添加。 PS:不同后缀文件的MIME类型是不一样的,可以点击查看获取。 Windows 2008 通过IIS添加MIME类型操作步骤 单击【开始】→【管理工具】→【Internet 信息服务(IIS)管理器】。 选中站点,点击【MIME类型】。打开后的窗口显示了当前IIS上已有的MIME类型。 点击右侧的“添加”,可以添加一个MIME类型,比如您要添加mp4文件的MIME类型,“文件扩展名”可以填写为.mp4,MIME类型可以填写video/mp4。 PS:不同后缀文件的MIME类型是不一样的,可以点击查看获取。

KB小秘书 2019-12-02 02:06:37 0 浏览量 回答数 0

问题

什么是Record接口

云栖大讲堂 2019-12-01 21:25:48 1222 浏览量 回答数 0

回答

回楼主ap7551q1q的帖子 貌似是不支持主动设置的,会根据本地文件名的后缀去自动设置content-type,如果无法获取,会填入默认的content-type。

wood23 2019-12-02 00:49:09 0 浏览量 回答数 0

问题

ECS Windows Server 如何在IIS中添加MIME类型

boxti 2019-12-01 21:30:41 1242 浏览量 回答数 0

回答

1)通过网站自身的程序漏洞如上传图片功能或留言功能,本身网站的程序用的就是开源的,而且还是经过网站开发公司在这个开源程序基础进行的二次开发,而且网站本身就留了后门,因为开源的程序作者不是傻瓜,肯定有利益可突的。 2)黑客通过sql注入获取管理员的后台密码,登陆到后台系统,利用后台的管理工具向配置文件写入WebShell木马,或者黑客私自添加上传类型,允许脚本程序类似asp、php的格式的文件上传。 3)利用后台功能的数据库备份与恢复功能获取webshell。如备份时候把备份文件的后缀改成asp。或者后台有mysql数据查询功能,黑客可以通过执行select..in To outfile 查询输出php文件,然后通过把代码插入到mysql,从而导致生成了webshell的木马。 4)服务器里其他站点被攻击牵扯到自己的站点被跨目录上传了网站木马,或者服务器上还搭载了ftp服务器,ftp服务器被攻击了,然后被注入了webshell的木马,然后网站系统也被感染了。 5)黑客直接攻击拿到了服务器权限,如果黑客利用溢出漏洞或其他的系统漏洞攻击了服务器,那么黑客获取了其服务器的管理员权限,就可以在任意网站站点目录里上传webshell木马文件。

问问小秘 2019-12-02 02:13:13 0 浏览量 回答数 0

回答

解决 根据命名规则获取文件名/URL 登录 媒体处理控制台 > 媒体管理 > 媒体库设置 > 工作流,选择所需的工作流,并单击右侧的 查看。移动鼠标到转码/截图等模块,可以看到对应的输出bucket截输出路径,对应的输出文件名就是输出路径,其中自定义变量替换为具体的值即可。对应的URL为:Bucketname.Endpoint/输出路径.后缀。 2 注意: 输出Object中可以设置静态常量和变量,其中静态常量即直接编写,而动态变量需要通过大括号({})引用使用。输出 Object 中可选如下变量: {RunId}: 媒体工作流执行ID; {ObjectPrefix}: 不含Bucket信息的原文件路径; {FileName}: 不含扩展名的原文件名; {ExtName}: 原文件扩展名; Endpoint的意义,参见 Endpoint设置。 控制台获取文件名/URL 登录 媒体处理控制台 > 媒体库,选择所需的视频,并单击 管理 > 媒体地址获取 > TRANSCODE > 复制,即可获取。 2 程序获取文件名/URL 在工作流中配置消息服务的队列或者通知(参见获取工作流通知消息实例。)> 业务端消费对应的消息 > 当收到相应工作流实例“Report”消息,代表转码结束 > 根据输入Object的URL或者媒体ID(MediaId),调用媒体转码API接口。接口参见 查询媒体-使用OSS文件地址 和 查询媒体-使用媒体ID。 根据输入ObjectURL查询转码结果,Java代码示例: static QueryMediaListByURLResponse queryMediaListByURL(DefaultAcsClient client) { QueryMediaListByURLRequest request = new QueryMediaListByURLRequest(); request.setFileURLs(objecturl); request.setIncludePlayList(true); QueryMediaListByURLResponse response = null; try { response = client.getAcsResponse(request); } catch (ServerException e) { throw new RuntimeException("QueryMediaListByURLRequest Server failed"); } catch (ClientException e) { throw new RuntimeException("QueryMediaListByURLRequest Client failed"); } return response; } 根据输入媒体ID查询转码结果,Java代码示例: static QueryMediaListResponse QueryMediaList(DefaultAcsClient client) { QueryMediaListRequest request = new QueryMediaListRequest(); request.setMediaIds("媒体ID"); request.setIncludePlayList(true); QueryMediaListResponse response = null; try { response = client.getAcsResponse(request); } catch (ServerException e) { throw new RuntimeException("QueryMediaListRequest Server failed"); } catch (ClientException e) { throw new RuntimeException("QueryMediaListRequest Client failed"); } return response; } 执行工作流输出文件怎么没有提供CDN地址 场景 视频上传,工作流转码任务触发后,在 媒体处理控制台 > 媒体库 > 管理 > 媒体地址获取 > 媒体地址 不显示媒资文件对应的CDN地址。 3 解决 编辑或者删除对应的工作流,重新配置工作流,在 配置工作流 > 配置内容分发网络(CDN) 中添加CDN加速域名。之后该工作流新创建的转码任务中,新增的CDN域名就会显示在输出文件的URL地址中。 2 原因 只有在新建工作流配置中有CDN域名,对应转码输出后的资源才会带CDN域名地址的链接,如果当时创建工作流不存在CDN域名,之后在bucket中绑定域名并进行加速,这样的域名是不会在输出媒体地址中显示的。 注意事项 媒体地址获取中,原文件地址获取是不能获取到CDN地址的,用户需自己绑定或者代码实现将bucket域名替换为对应的CDN域名。 2 输出文件支持如下变量设置 输出 Object 中可选如下变量: {RunId}:媒体工作流执行ID {ObjectPrefix}:不含Bucket信息的原文件(输入文件)路径 {FileName}:不含扩展名的原文件(输入文件)名 {ExtName}:原文件(输入文件)扩展名 如何触发工作流的执行 当工作流的配置的输入Bucket路径中存在文件的增量输入,对应的工作流就会被触发,进行相关的转码截图任务等。 6 关于如何上传文件到工作流的输入Bucket路径中,参见上传视频文件的方法。

保持可爱mmm 2020-03-30 11:55:21 0 浏览量 回答数 0

回答

Re摄像头采集视频,使用OSS MEDIA C SDK成功上传视频,但是m3u8和ts文件无法 看到LZ从1月份开始进入这项工作, 我也刚开始接触这些, 感觉工作量和技术都需要好多. lz有什么经验可分享吗? ------------------------- Re摄像头采集视频,使用OSS MEDIA C SDK成功上传视频,但是m3u8和ts文件无法 将一段视频切片成多个ts文件后, 先保存在本地, 想测试上传, 能不能批量上传? 如果文件量大的话LZ是怎么上传的. 对oss还不太熟悉 ------------------------- Re摄像头采集视频,使用OSS MEDIA C SDK成功上传视频,但是m3u8和ts文件无法 LZ你好 我做回调的时候, 系统参数中mimeType获取为null, 其它需要的参数都没问题. 看了下, oss上传的文件都没有后缀名, 这个怎么解决? 需要在上传时指定文件类型吗? 没看到上传的demo里在哪里可以设置 或者是回调或读取文件时有什么设置?

朱比特 2019-12-01 23:32:38 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本示例讲解如何在服务端通过PHP代码完成签名,然后通过表单直传数据到OSS。 说明 本示例无法实现分片上传与断点续传。 背景 采用JavaScript客户端直接签名(参见JavaScript客户端签名直传)有一个严重的安全隐患:OSS AccessKey暴露在前端页面,这是非常不安全的做法。因此,OSS提供了服务端签名后直传的方案。 Demo 您可以通过样例体验服务端签名后直传效果:PC浏览器测试样例 原理介绍 服务端签名后直传的逻辑图如下: 流程如下: 用户发送上传Policy请求到应用服务器。 应用服务器返回上传Policy和签名给用户。 用户使用Plupload直接上传数据到OSS。 步骤 1:下载并安装Plugload Plupload是一款简单易用且功能强大的文件上传工具, 支持多种上传方式,包括html5、flash、silverlight,、html4。它会智能检测当前环境,选择最适合的上传方式,并且会优先采用Html5方式。请参见Plupload官网进行下载和安装。 步骤 2:下载应用服务器代码 PHP:下载地址 Java:下载地址 Python:下载地址 Go:下载地址 步骤 3:修改配置文件 本示例采用PHP编写。将下载包解压后,修改以下文件: php/get.php文件:$id= '<yourAccessKeyId>'; $key= '<yourAccessKeySecret>'; $host = 'http://post-test.oss-cn-hangzhou.aliyuncs.com $id:您的AccessKeyId $key:您的AessKeySecret $host:格式为BucketName.Endpoint,例如post-test.oss-cn-hangzhou.aliyuncs.com 说明 关于Endpoint的介绍,请参见Endpoint(访问域名)。 upload.js文件 将变量severUrl改成服务器部署的地址,例如http://abc.com:8080/oss-h5-upload-js-php/get.php。 步骤 4:设置CORS HTML表单直接上传到OSS会产生跨域请求。为了浏览安全,需要为Bucket设置跨域规则(CORS),支持Post方法。 具体操作步骤请参见设置跨域访问。设置如下图所示: 说明 在低版本IE浏览器,Plupload会以Flash方式执行。您需要设置crossdomain.xml ,设置方法请参见OSS Web直传—使用Flash上传。 步骤 5:体验服务端签名后直传 将应用服务器代码zip包解压到Web根目录下。 在Web浏览器中输入<Web应用服务器地址>/oss-h5-upload-js-php/index.html,例如http://abc.com:8080/oss-h5-upload-js-php/index.html。 选择一个或多个文件进行上传。 上传成功后,通过控制台查看上传结果。 核心代码解析 设置成随机文件名 如果想在上传时固定设置成随机文件名,后缀保持跟客户端文件一致,可以将函数改为:function check_object_radio() { g_object_name_type = 'random_name'; } 设置成用户的文件名 如果想在上传时固定设置成用户的文件名,可以将函数改为:function check_object_radio() { g_object_name_type = 'local_name'; } 设置上传目录 上传的目录由服务端(即PHP)指定, 每个客户端只能上传到指定的目录,实现安全隔离。下面的代码是将上传目录改成abc/,注意目录必须以正斜线(/)结尾。$dir = 'abc/'; 设置上传过滤条件 您可以利用Plupload的属性filters设置上传的过滤条件,如设置只能上传图片、上传文件的大小、不能有重复上传等。var uploader = new plupload.Uploader({ …… filters: { mime_types : [ //只允许上传图片和zip文件 { title : "Image files", extensions : "jpg,gif,png,bmp" }, { title : "Zip files", extensions : "zip" } ], max_file_size : '400kb', //最大只能上传400KB的文件 prevent_duplicates : true //不允许选取重复文件 }, mime_types:限制上传的文件后缀 max_file_size:限制上传的文件大小 prevent_duplicates:限制不能重复上传 说明 filters过滤条件不是必须的。如果不想设置过滤条件,只要把该项注释即可。 获取上传后的文件名 如果要知道文件上传成功后的文件名,可以用Plupload调用FileUploaded事件获取,如下所示:FileUploaded: function(up, file, info) { if (info.status == 200) { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = 'upload to oss success, object name:' + get_uploaded_object_name(file.name); } else { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = info.response; } }可以利用如下函数,得到上传到OSS的文件名,其中file.name记录了上传本地文件的名称。get_uploaded_object_name(file.name) 上传签名 JavaScript可以从服务端获取policyBase64、accessid、signature这三个变量,获取这三个变量的核心代码如下:phpUrl = './php/get.php' xmlhttp.open( "GET", phpUrl, false ); xmlhttp.send( null ); var obj = eval ("(" + xmlhttp.responseText+ ")"); host = obj['host'] policyBase64 = obj['policy'] accessid = obj['accessid'] signature = obj['signature'] expire = parseInt(obj['expire']) key = obj['dir'] xmlhttp.responseText解析如下: 说明 以下仅为示例,并不要求必须是相同的格式,但是必须有accessid、policy、signature这三个值。 {"accessid":"6MKOqxGiGU4AUk44", "host":"http://post-test.oss-cn-hangzhou.aliyuncs.com", "policy":"eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wNVQyMDoyMzoyM1oiLCJjxb25kaXRpb25zIjpbWyJjcb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXItZGlyXC8iXV19", "signature":"I2u57FWjTKqX/AE6doIdyff151E=", "expire":1446726203,"dir":"user-dir/"} accessid:用户请求的accessid。 host:用户要往哪个域名发送上传请求。 policy:用户表单上传的策略(Policy),是经过base64编码过的字符串。 signature:对变量policy签名后的字符串。 expire:上传策略失效时间,在PolicyText里指定。在失效时间之前,都可以利用此Policy上传文件,所以没有必要每次上传都去服务端获取签名。 说明 为了减少服务端的压力,设计思路是:初始化上传时,每上传一个文件后,获取一次签名。然后再上传时,比较当前时间与签名时间,看签名时间是否失效。如果失效了,就重新获取一次签名,如果没有失效,就使用之前的签名。这里就用到了变量expire,核心代码如下:now = timestamp = Date.parse(new Date()) / 1000; [color=#000000]//可以判断当前expire是否超过了当前时间,如果超过了当前时间,就重新取一次签名,缓冲时间为3[/color] if (expire < now + 3) {    .....    phpUrl = './php/get.php'    xmlhttp.open( "GET", phpUrl, false );    xmlhttp.send( null );    ...... } return . 解析Policy的内容如下:{"expiration":"2015-11-05T20:23:23Z", "conditions":[["content-length-range",0,1048576000], ["starts-with","$key","user-dir/"]] 说明 Policy的详细信息请参见Policy基本元素。 上面Policy中增加了starts-with,用来指定此次上传的文件名必须以user-dir开头,用户可自行指定此字符串。增加starts-with的原因是:在很多场景下,一个应用对应一个Bucket,为了防止数字覆盖,每个用户上传到OSS的文件都可以有特定的前缀。这样就存在一个问题,用户获取到这个Policy后,在失效期内都能修改上传前缀,从而上传到别人的目录下。为了解决这个问题,可以设置应用服务器在上传时就指定用户上传的文件必须是某个前缀。这样如果用户获取到了Policy也没有办法上传到别人的前缀上,从而保证了数据的安全性。 总结 本示例中,web端向服务端请求签名,然后直接上传,不会对服务端产生压力,而且安全可靠。但是这个示例有个问题,就是用户上传了多少文件,上传了什么文件,服务端并不能马上知道,如果想实时了解用户上传了什么文件,可以采用服务端签名直传并设置上传回调。

2019-12-01 23:13:27 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本示例讲解如何在服务端通过PHP代码完成签名,然后通过表单直传数据到OSS。 说明 本示例无法实现分片上传与断点续传。 背景 采用JavaScript客户端直接签名(参见JavaScript客户端签名直传)有一个严重的安全隐患:OSS AccessKey暴露在前端页面,这是非常不安全的做法。因此,OSS提供了服务端签名后直传的方案。 Demo 您可以通过样例体验服务端签名后直传效果:PC浏览器测试样例 原理介绍 服务端签名后直传的逻辑图如下: 流程如下: 用户发送上传Policy请求到应用服务器。 应用服务器返回上传Policy和签名给用户。 用户使用Plupload直接上传数据到OSS。 步骤 1:下载并安装Plugload Plupload是一款简单易用且功能强大的文件上传工具, 支持多种上传方式,包括html5、flash、silverlight,、html4。它会智能检测当前环境,选择最适合的上传方式,并且会优先采用Html5方式。请参见Plupload官网进行下载和安装。 步骤 2:下载应用服务器代码 PHP:下载地址 Java:下载地址 Python:下载地址 Go:下载地址 步骤 3:修改配置文件 本示例采用PHP编写。将下载包解压后,修改以下文件: php/get.php文件:$id= '<yourAccessKeyId>'; $key= '<yourAccessKeySecret>'; $host = 'http://post-test.oss-cn-hangzhou.aliyuncs.com $id:您的AccessKeyId $key:您的AessKeySecret $host:格式为BucketName.Endpoint,例如post-test.oss-cn-hangzhou.aliyuncs.com 说明 关于Endpoint的介绍,请参见Endpoint(访问域名)。 upload.js文件 将变量severUrl改成服务器部署的地址,例如http://abc.com:8080/oss-h5-upload-js-php/get.php。 步骤 4:设置CORS HTML表单直接上传到OSS会产生跨域请求。为了浏览安全,需要为Bucket设置跨域规则(CORS),支持Post方法。 具体操作步骤请参见设置跨域访问。设置如下图所示: 说明 在低版本IE浏览器,Plupload会以Flash方式执行。您需要设置crossdomain.xml ,设置方法请参见OSS Web直传—使用Flash上传。 步骤 5:体验服务端签名后直传 将应用服务器代码zip包解压到Web根目录下。 在Web浏览器中输入<Web应用服务器地址>/oss-h5-upload-js-php/index.html,例如http://abc.com:8080/oss-h5-upload-js-php/index.html。 选择一个或多个文件进行上传。 上传成功后,通过控制台查看上传结果。 核心代码解析 设置成随机文件名 如果想在上传时固定设置成随机文件名,后缀保持跟客户端文件一致,可以将函数改为:function check_object_radio() { g_object_name_type = 'random_name'; } 设置成用户的文件名 如果想在上传时固定设置成用户的文件名,可以将函数改为:function check_object_radio() { g_object_name_type = 'local_name'; } 设置上传目录 上传的目录由服务端(即PHP)指定, 每个客户端只能上传到指定的目录,实现安全隔离。下面的代码是将上传目录改成abc/,注意目录必须以正斜线(/)结尾。$dir = 'abc/'; 设置上传过滤条件 您可以利用Plupload的属性filters设置上传的过滤条件,如设置只能上传图片、上传文件的大小、不能有重复上传等。var uploader = new plupload.Uploader({ …… filters: { mime_types : [ //只允许上传图片和zip文件 { title : "Image files", extensions : "jpg,gif,png,bmp" }, { title : "Zip files", extensions : "zip" } ], max_file_size : '400kb', //最大只能上传400KB的文件 prevent_duplicates : true //不允许选取重复文件 }, mime_types:限制上传的文件后缀 max_file_size:限制上传的文件大小 prevent_duplicates:限制不能重复上传 说明 filters过滤条件不是必须的。如果不想设置过滤条件,只要把该项注释即可。 获取上传后的文件名 如果要知道文件上传成功后的文件名,可以用Plupload调用FileUploaded事件获取,如下所示:FileUploaded: function(up, file, info) { if (info.status == 200) { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = 'upload to oss success, object name:' + get_uploaded_object_name(file.name); } else { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = info.response; } }可以利用如下函数,得到上传到OSS的文件名,其中file.name记录了上传本地文件的名称。get_uploaded_object_name(file.name) 上传签名 JavaScript可以从服务端获取policyBase64、accessid、signature这三个变量,获取这三个变量的核心代码如下:phpUrl = './php/get.php' xmlhttp.open( "GET", phpUrl, false ); xmlhttp.send( null ); var obj = eval ("(" + xmlhttp.responseText+ ")"); host = obj['host'] policyBase64 = obj['policy'] accessid = obj['accessid'] signature = obj['signature'] expire = parseInt(obj['expire']) key = obj['dir'] xmlhttp.responseText解析如下: 说明 以下仅为示例,并不要求必须是相同的格式,但是必须有accessid、policy、signature这三个值。 {"accessid":"6MKOqxGiGU4AUk44", "host":"http://post-test.oss-cn-hangzhou.aliyuncs.com", "policy":"eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wNVQyMDoyMzoyM1oiLCJjxb25kaXRpb25zIjpbWyJjcb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXItZGlyXC8iXV19", "signature":"I2u57FWjTKqX/AE6doIdyff151E=", "expire":1446726203,"dir":"user-dir/"} accessid:用户请求的accessid。 host:用户要往哪个域名发送上传请求。 policy:用户表单上传的策略(Policy),是经过base64编码过的字符串。 signature:对变量policy签名后的字符串。 expire:上传策略失效时间,在PolicyText里指定。在失效时间之前,都可以利用此Policy上传文件,所以没有必要每次上传都去服务端获取签名。 说明 为了减少服务端的压力,设计思路是:初始化上传时,每上传一个文件后,获取一次签名。然后再上传时,比较当前时间与签名时间,看签名时间是否失效。如果失效了,就重新获取一次签名,如果没有失效,就使用之前的签名。这里就用到了变量expire,核心代码如下:now = timestamp = Date.parse(new Date()) / 1000; [color=#000000]//可以判断当前expire是否超过了当前时间,如果超过了当前时间,就重新取一次签名,缓冲时间为3[/color] if (expire < now + 3) {    .....    phpUrl = './php/get.php'    xmlhttp.open( "GET", phpUrl, false );    xmlhttp.send( null );    ...... } return . 解析Policy的内容如下:{"expiration":"2015-11-05T20:23:23Z", "conditions":[["content-length-range",0,1048576000], ["starts-with","$key","user-dir/"]] 说明 Policy的详细信息请参见Policy基本元素。 上面Policy中增加了starts-with,用来指定此次上传的文件名必须以user-dir开头,用户可自行指定此字符串。增加starts-with的原因是:在很多场景下,一个应用对应一个Bucket,为了防止数字覆盖,每个用户上传到OSS的文件都可以有特定的前缀。这样就存在一个问题,用户获取到这个Policy后,在失效期内都能修改上传前缀,从而上传到别人的目录下。为了解决这个问题,可以设置应用服务器在上传时就指定用户上传的文件必须是某个前缀。这样如果用户获取到了Policy也没有办法上传到别人的前缀上,从而保证了数据的安全性。 总结 本示例中,web端向服务端请求签名,然后直接上传,不会对服务端产生压力,而且安全可靠。但是这个示例有个问题,就是用户上传了多少文件,上传了什么文件,服务端并不能马上知道,如果想实时了解用户上传了什么文件,可以采用服务端签名直传并设置上传回调。

2019-12-01 23:13:28 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本示例讲解如何在服务端通过PHP代码完成签名,然后通过表单直传数据到OSS。 说明 本示例无法实现分片上传与断点续传。 背景 采用JavaScript客户端直接签名(参见JavaScript客户端签名直传)有一个严重的安全隐患:OSS AccessKey暴露在前端页面,这是非常不安全的做法。因此,OSS提供了服务端签名后直传的方案。 Demo 您可以通过样例体验服务端签名后直传效果:PC浏览器测试样例 原理介绍 服务端签名后直传的逻辑图如下: 流程如下: 用户发送上传Policy请求到应用服务器。 应用服务器返回上传Policy和签名给用户。 用户使用Plupload直接上传数据到OSS。 步骤 1:下载并安装Plugload Plupload是一款简单易用且功能强大的文件上传工具, 支持多种上传方式,包括html5、flash、silverlight,、html4。它会智能检测当前环境,选择最适合的上传方式,并且会优先采用Html5方式。请参见Plupload官网进行下载和安装。 步骤 2:下载应用服务器代码 PHP:下载地址 Java:下载地址 Python:下载地址 Go:下载地址 步骤 3:修改配置文件 本示例采用PHP编写。将下载包解压后,修改以下文件: php/get.php文件:$id= '<yourAccessKeyId>'; $key= '<yourAccessKeySecret>'; $host = 'http://post-test.oss-cn-hangzhou.aliyuncs.com $id:您的AccessKeyId $key:您的AessKeySecret $host:格式为BucketName.Endpoint,例如post-test.oss-cn-hangzhou.aliyuncs.com 说明 关于Endpoint的介绍,请参见Endpoint(访问域名)。 upload.js文件 将变量severUrl改成服务器部署的地址,例如http://abc.com:8080/oss-h5-upload-js-php/get.php。 步骤 4:设置CORS HTML表单直接上传到OSS会产生跨域请求。为了浏览安全,需要为Bucket设置跨域规则(CORS),支持Post方法。 具体操作步骤请参见设置跨域访问。设置如下图所示: 说明 在低版本IE浏览器,Plupload会以Flash方式执行。您需要设置crossdomain.xml ,设置方法请参见OSS Web直传—使用Flash上传。 步骤 5:体验服务端签名后直传 将应用服务器代码zip包解压到Web根目录下。 在Web浏览器中输入<Web应用服务器地址>/oss-h5-upload-js-php/index.html,例如http://abc.com:8080/oss-h5-upload-js-php/index.html。 选择一个或多个文件进行上传。 上传成功后,通过控制台查看上传结果。 核心代码解析 设置成随机文件名 如果想在上传时固定设置成随机文件名,后缀保持跟客户端文件一致,可以将函数改为:function check_object_radio() { g_object_name_type = 'random_name'; } 设置成用户的文件名 如果想在上传时固定设置成用户的文件名,可以将函数改为:function check_object_radio() { g_object_name_type = 'local_name'; } 设置上传目录 上传的目录由服务端(即PHP)指定, 每个客户端只能上传到指定的目录,实现安全隔离。下面的代码是将上传目录改成abc/,注意目录必须以正斜线(/)结尾。$dir = 'abc/'; 设置上传过滤条件 您可以利用Plupload的属性filters设置上传的过滤条件,如设置只能上传图片、上传文件的大小、不能有重复上传等。var uploader = new plupload.Uploader({ …… filters: { mime_types : [ //只允许上传图片和zip文件 { title : "Image files", extensions : "jpg,gif,png,bmp" }, { title : "Zip files", extensions : "zip" } ], max_file_size : '400kb', //最大只能上传400KB的文件 prevent_duplicates : true //不允许选取重复文件 }, mime_types:限制上传的文件后缀 max_file_size:限制上传的文件大小 prevent_duplicates:限制不能重复上传 说明 filters过滤条件不是必须的。如果不想设置过滤条件,只要把该项注释即可。 获取上传后的文件名 如果要知道文件上传成功后的文件名,可以用Plupload调用FileUploaded事件获取,如下所示:FileUploaded: function(up, file, info) { if (info.status == 200) { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = 'upload to oss success, object name:' + get_uploaded_object_name(file.name); } else { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = info.response; } }可以利用如下函数,得到上传到OSS的文件名,其中file.name记录了上传本地文件的名称。get_uploaded_object_name(file.name) 上传签名 JavaScript可以从服务端获取policyBase64、accessid、signature这三个变量,获取这三个变量的核心代码如下:phpUrl = './php/get.php' xmlhttp.open( "GET", phpUrl, false ); xmlhttp.send( null ); var obj = eval ("(" + xmlhttp.responseText+ ")"); host = obj['host'] policyBase64 = obj['policy'] accessid = obj['accessid'] signature = obj['signature'] expire = parseInt(obj['expire']) key = obj['dir'] xmlhttp.responseText解析如下: 说明 以下仅为示例,并不要求必须是相同的格式,但是必须有accessid、policy、signature这三个值。 {"accessid":"6MKOqxGiGU4AUk44", "host":"http://post-test.oss-cn-hangzhou.aliyuncs.com", "policy":"eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wNVQyMDoyMzoyM1oiLCJjxb25kaXRpb25zIjpbWyJjcb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXItZGlyXC8iXV19", "signature":"I2u57FWjTKqX/AE6doIdyff151E=", "expire":1446726203,"dir":"user-dir/"} accessid:用户请求的accessid。 host:用户要往哪个域名发送上传请求。 policy:用户表单上传的策略(Policy),是经过base64编码过的字符串。 signature:对变量policy签名后的字符串。 expire:上传策略失效时间,在PolicyText里指定。在失效时间之前,都可以利用此Policy上传文件,所以没有必要每次上传都去服务端获取签名。 说明 为了减少服务端的压力,设计思路是:初始化上传时,每上传一个文件后,获取一次签名。然后再上传时,比较当前时间与签名时间,看签名时间是否失效。如果失效了,就重新获取一次签名,如果没有失效,就使用之前的签名。这里就用到了变量expire,核心代码如下:now = timestamp = Date.parse(new Date()) / 1000; [color=#000000]//可以判断当前expire是否超过了当前时间,如果超过了当前时间,就重新取一次签名,缓冲时间为3[/color] if (expire < now + 3) {    .....    phpUrl = './php/get.php'    xmlhttp.open( "GET", phpUrl, false );    xmlhttp.send( null );    ...... } return . 解析Policy的内容如下:{"expiration":"2015-11-05T20:23:23Z", "conditions":[["content-length-range",0,1048576000], ["starts-with","$key","user-dir/"]] 说明 Policy的详细信息请参见Policy基本元素。 上面Policy中增加了starts-with,用来指定此次上传的文件名必须以user-dir开头,用户可自行指定此字符串。增加starts-with的原因是:在很多场景下,一个应用对应一个Bucket,为了防止数字覆盖,每个用户上传到OSS的文件都可以有特定的前缀。这样就存在一个问题,用户获取到这个Policy后,在失效期内都能修改上传前缀,从而上传到别人的目录下。为了解决这个问题,可以设置应用服务器在上传时就指定用户上传的文件必须是某个前缀。这样如果用户获取到了Policy也没有办法上传到别人的前缀上,从而保证了数据的安全性。 总结 本示例中,web端向服务端请求签名,然后直接上传,不会对服务端产生压力,而且安全可靠。但是这个示例有个问题,就是用户上传了多少文件,上传了什么文件,服务端并不能马上知道,如果想实时了解用户上传了什么文件,可以采用服务端签名直传并设置上传回调。

2019-12-01 23:13:28 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本示例讲解如何在服务端通过PHP代码完成签名,然后通过表单直传数据到OSS。 说明 本示例无法实现分片上传与断点续传。 背景 采用JavaScript客户端直接签名(参见JavaScript客户端签名直传)有一个严重的安全隐患:OSS AccessKey暴露在前端页面,这是非常不安全的做法。因此,OSS提供了服务端签名后直传的方案。 Demo 您可以通过样例体验服务端签名后直传效果:PC浏览器测试样例 原理介绍 服务端签名后直传的逻辑图如下: 流程如下: 用户发送上传Policy请求到应用服务器。 应用服务器返回上传Policy和签名给用户。 用户使用Plupload直接上传数据到OSS。 步骤 1:下载并安装Plugload Plupload是一款简单易用且功能强大的文件上传工具, 支持多种上传方式,包括html5、flash、silverlight,、html4。它会智能检测当前环境,选择最适合的上传方式,并且会优先采用Html5方式。请参见Plupload官网进行下载和安装。 步骤 2:下载应用服务器代码 PHP:下载地址 Java:下载地址 Python:下载地址 Go:下载地址 步骤 3:修改配置文件 本示例采用PHP编写。将下载包解压后,修改以下文件: php/get.php文件:$id= '<yourAccessKeyId>'; $key= '<yourAccessKeySecret>'; $host = 'http://post-test.oss-cn-hangzhou.aliyuncs.com $id:您的AccessKeyId $key:您的AessKeySecret $host:格式为BucketName.Endpoint,例如post-test.oss-cn-hangzhou.aliyuncs.com 说明 关于Endpoint的介绍,请参见Endpoint(访问域名)。 upload.js文件 将变量severUrl改成服务器部署的地址,例如http://abc.com:8080/oss-h5-upload-js-php/get.php。 步骤 4:设置CORS HTML表单直接上传到OSS会产生跨域请求。为了浏览安全,需要为Bucket设置跨域规则(CORS),支持Post方法。 具体操作步骤请参见设置跨域访问。设置如下图所示: 说明 在低版本IE浏览器,Plupload会以Flash方式执行。您需要设置crossdomain.xml ,设置方法请参见OSS Web直传—使用Flash上传。 步骤 5:体验服务端签名后直传 将应用服务器代码zip包解压到Web根目录下。 在Web浏览器中输入<Web应用服务器地址>/oss-h5-upload-js-php/index.html,例如http://abc.com:8080/oss-h5-upload-js-php/index.html。 选择一个或多个文件进行上传。 上传成功后,通过控制台查看上传结果。 核心代码解析 设置成随机文件名 如果想在上传时固定设置成随机文件名,后缀保持跟客户端文件一致,可以将函数改为:function check_object_radio() { g_object_name_type = 'random_name'; } 设置成用户的文件名 如果想在上传时固定设置成用户的文件名,可以将函数改为:function check_object_radio() { g_object_name_type = 'local_name'; } 设置上传目录 上传的目录由服务端(即PHP)指定, 每个客户端只能上传到指定的目录,实现安全隔离。下面的代码是将上传目录改成abc/,注意目录必须以正斜线(/)结尾。$dir = 'abc/'; 设置上传过滤条件 您可以利用Plupload的属性filters设置上传的过滤条件,如设置只能上传图片、上传文件的大小、不能有重复上传等。var uploader = new plupload.Uploader({ …… filters: { mime_types : [ //只允许上传图片和zip文件 { title : "Image files", extensions : "jpg,gif,png,bmp" }, { title : "Zip files", extensions : "zip" } ], max_file_size : '400kb', //最大只能上传400KB的文件 prevent_duplicates : true //不允许选取重复文件 }, mime_types:限制上传的文件后缀 max_file_size:限制上传的文件大小 prevent_duplicates:限制不能重复上传 说明 filters过滤条件不是必须的。如果不想设置过滤条件,只要把该项注释即可。 获取上传后的文件名 如果要知道文件上传成功后的文件名,可以用Plupload调用FileUploaded事件获取,如下所示:FileUploaded: function(up, file, info) { if (info.status == 200) { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = 'upload to oss success, object name:' + get_uploaded_object_name(file.name); } else { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = info.response; } }可以利用如下函数,得到上传到OSS的文件名,其中file.name记录了上传本地文件的名称。get_uploaded_object_name(file.name) 上传签名 JavaScript可以从服务端获取policyBase64、accessid、signature这三个变量,获取这三个变量的核心代码如下:phpUrl = './php/get.php' xmlhttp.open( "GET", phpUrl, false ); xmlhttp.send( null ); var obj = eval ("(" + xmlhttp.responseText+ ")"); host = obj['host'] policyBase64 = obj['policy'] accessid = obj['accessid'] signature = obj['signature'] expire = parseInt(obj['expire']) key = obj['dir'] xmlhttp.responseText解析如下: 说明 以下仅为示例,并不要求必须是相同的格式,但是必须有accessid、policy、signature这三个值。 {"accessid":"6MKOqxGiGU4AUk44", "host":"http://post-test.oss-cn-hangzhou.aliyuncs.com", "policy":"eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wNVQyMDoyMzoyM1oiLCJjxb25kaXRpb25zIjpbWyJjcb250ZW50LWxlbmd0aC1yYW5nZSIsMCwxMDQ4NTc2MDAwXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXItZGlyXC8iXV19", "signature":"I2u57FWjTKqX/AE6doIdyff151E=", "expire":1446726203,"dir":"user-dir/"} accessid:用户请求的accessid。 host:用户要往哪个域名发送上传请求。 policy:用户表单上传的策略(Policy),是经过base64编码过的字符串。 signature:对变量policy签名后的字符串。 expire:上传策略失效时间,在PolicyText里指定。在失效时间之前,都可以利用此Policy上传文件,所以没有必要每次上传都去服务端获取签名。 说明 为了减少服务端的压力,设计思路是:初始化上传时,每上传一个文件后,获取一次签名。然后再上传时,比较当前时间与签名时间,看签名时间是否失效。如果失效了,就重新获取一次签名,如果没有失效,就使用之前的签名。这里就用到了变量expire,核心代码如下:now = timestamp = Date.parse(new Date()) / 1000; [color=#000000]//可以判断当前expire是否超过了当前时间,如果超过了当前时间,就重新取一次签名,缓冲时间为3[/color] if (expire < now + 3) {    .....    phpUrl = './php/get.php'    xmlhttp.open( "GET", phpUrl, false );    xmlhttp.send( null );    ...... } return . 解析Policy的内容如下:{"expiration":"2015-11-05T20:23:23Z", "conditions":[["content-length-range",0,1048576000], ["starts-with","$key","user-dir/"]] 说明 Policy的详细信息请参见Policy基本元素。 上面Policy中增加了starts-with,用来指定此次上传的文件名必须以user-dir开头,用户可自行指定此字符串。增加starts-with的原因是:在很多场景下,一个应用对应一个Bucket,为了防止数字覆盖,每个用户上传到OSS的文件都可以有特定的前缀。这样就存在一个问题,用户获取到这个Policy后,在失效期内都能修改上传前缀,从而上传到别人的目录下。为了解决这个问题,可以设置应用服务器在上传时就指定用户上传的文件必须是某个前缀。这样如果用户获取到了Policy也没有办法上传到别人的前缀上,从而保证了数据的安全性。 总结 本示例中,web端向服务端请求签名,然后直接上传,不会对服务端产生压力,而且安全可靠。但是这个示例有个问题,就是用户上传了多少文件,上传了什么文件,服务端并不能马上知道,如果想实时了解用户上传了什么文件,可以采用服务端签名直传并设置上传回调。

2019-12-01 23:13:28 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播