最近实现了一段利用PHP SDK做表单上传的简单代码
一:使用表单上传,也就是使用PostObject
使用方法:
假如是oss-test-post-object这个bucket,使用杭州的域名oss-cn-hangzhou.aliyuncs.com
将代码中的BUCKET换成自己的oss-test-post-object, KEY换成自己的OSS secretkey,ID换成自己的OSS ID, BUCKET.HOST 替换成oss-test-post-object.oss-cn-hangzhou.aliyuncs.com
特别说明:
1. 这里的代码都是简单实现,各位如果有需要还是根据自己的需求去实现
2. 尤其是在php中包含了id和key,很不安全,还需要考虑安全的实现。
<?php
$options = array();
$options['expiration'] = '2015-12-01T12:00:00.000Z'; /// 授权过期时间
$conditions = array();
array_push($conditions, array('bucket'=>'BUCKET'));
$content_length_range = array();
array_push($content_length_range, 'content-length-range');
array_push($content_length_range, 0);
array_push($content_length_range, 1048575);
array_push($conditions, $content_length_range);
$options['conditions'] = $conditions;
echo stripslashes(json_encode($options));
$policy = base64_encode(stripslashes(json_encode($options)));
$sign = base64_encode(hash_hmac('sha1',$policy,'KEY', true));
echo $policy;
echo '<br>';
echo $sign;
echo '<br>';
?>
<script type="text/javascript" charset="utf-8">
function change(e){
var src=e.target || window.event.srcElement; //获取事件源,兼容chrome/IE
src.style.background='red';
//测试chrome浏览器、IE6,获取的文件名带有文件的path路径
//下面把路径截取为文件名
var filename=src.value;
//获取文件名的后缀名(文件格式)
var suffix = filename.substring( filename.lastIndexOf('.')+1 );
document.getElementById("key_id").value = "thisisatest." + suffix;
}
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form enctype="multipart/form-data" method="POST" action="BUCKET.HOST" charset=UTF-8>
<input type="text" name="OSSAccessKeyId" value="ID">
<input type="text" name="policy" value="<?php echo $policy; ?>">
<input type="text" name="Signature" value="<?php echo $sign; ?>">
<input type="hidden" name="key" id="key_id" value="${filename}">
<input type="file" name="file" onchange="change(event);"></input>
<input type="submit" name="ok" value="upload"/>
</form>
</body>
</html>
保存成php_post_object.php, 放置在本地的HTTP Server的目录下,以保证可以访问
在浏览器访问 php_post_object.php 会出现页面有“选择文件”, 选择本地文件后,点击upload,然后在控制台上看看文件是否OK就可以了。
二:使用页面,调用PHP的multipart 上传文件
代码主要实现的内容是将指定目录下的test2文件上传到指定的HOST里的BUCKET下,以OBJECT来命名
步骤如下:
1. 下载代码
见附件:
[attachment=68680]
2. 解压到HTTP Server的目录下
例如是jstest目录下
drwxrwxr-x 2 admin admin 4096 Apr 30 2014 util
drwxrwxr-x 2 admin admin 4096 Apr 30 2014 services
drwxrwxr-x 2 admin admin 4096 Apr 30 2014 logs
drwxrwxr-x 3 admin admin 4096 Apr 30 2014 lib
drwxrwxr-x 2 admin admin 4096 Apr 30 2014 lang
drwxrwxr-x 2 admin admin 4096 Apr 30 2014 docs
drwxrwxr-x 2 admin admin 4096 Apr 30 2014 demo
-rw-rw-r-- 1 admin admin 404 Jun 6 2014 conf.inc.php
-rw-rw-r-- 1 admin admin 79653 Jun 25 2014 sdk.class.php
-rw-rw-r-- 1 admin admin 1144 Jan 27 11:17 multipart_upload.js
-rw-rw-r-- 1 admin admin 306 Jan 27 11:17 multipart_upload.html
-rw-rw-r-- 1 admin admin 79653 Jan 27 11:27 test2
-rw-rw-r-- 1 admin admin 1107 Jan 27 20:09 multipart_upload.php
3. 修改multipart_upload.php
如图所示:
[attachment=68681]
4. 通过浏览器点击上传页面
http://127.0.0.1/jstest/multipart_upload.html
当页面出现类似Status:200
还有这样的文字时,表示上传成功
[etag] => "B7BA6E2733FC8AE4F30228611F45B4ED" [server] => AliyunOSS
特别说明:
1. 这里的代码都是简单实现,各位如果有需要还是根据自己的需求去实现
2. 尤其是在php中包含了id和key,很不安全,还需要考虑安全的实现。
另外还有一个html页面的上传:
http://bbs.aliyun.com/read/157585.html?spm=0.0.0.0.ZwZUGT
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。