开发者社区> 问答> 正文

用PHP和JS来实现PostObject表单操作和multipart上传操作

最近实现了一段利用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

展开
收起
wood23 2015-01-28 00:13:22 27932 0
6 条回答
写回答
取消 提交回答
  • 回3楼简讯的帖子
    您好,请问这个问题解决了没?
    2015-09-14 18:43:49
    赞同 展开评论 打赏
  • 再问:有没有java post表单,能够实现multiplatupload操作?

    另外,上面的下载链接需要权限,请问怎么开权限?
    2015-06-16 11:13:52
    赞同 展开评论 打赏
  • Re用PHP和JS来实现PostObject表单操作和multipart上传操作
    请问,我试了下第二个代码,但是报下面错误,请问是什么原因呢?
    RequestCore_Exception: cURL resource: Resource id #9; cURL error: Could not resolve host: http (6) in D:\PHP\Web\jstest\lib\requestcore\requestcore.class.php on line 825
    2015-05-11 14:26:07
    赞同 展开评论 打赏
  • 回2楼符合规范的帖子
    不知道你是否解决了这个问题?
    2015-04-25 15:30:49
    赞同 展开评论 打赏
  • Re用PHP和JS来实现PostObject表单操作和multipart上传操作
    有没有   java   post 表单上传    文件的   代码 !急需.
    2015-01-30 13:58:02
    赞同 展开评论 打赏
  • 好文章,值得一看  
    2015-01-29 17:48:56
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载