开发者社区 问答 正文

OSS新手求助php下配置OSS上传图片问题

官方文档研究了有近一周,百度了很多相关的关键词,仍然找不到头绪和进展。
唯一找到了几篇demo大多是前几年的,感觉与官方接口给的demo又对不上。
新手刚接触,还希望php方面的大侠可以指点我一二。
我说一下我的困惑。
我想上传图片,也就是上传Object,在官方给的php接口中demo里面找到的相关示例如下:
//上传object 相关示例
/**
*简单上传
*上传指定变量的内存值
*/
$object = "oss-php-sdk-test/upload-test-object-name.txt";
$content  = 'hello world';
$options = array(
    'content' => $content,
    'length' => strlen($content),
);
$res = $oss->upload_file_by_content($bucket, $object, $options);    
$msg = "上传字符串到 /" . $bucket . "/" . $object;
OSSUtil::print_res($res, $msg);

/**
*上传时设定Object的Http Header
*上传指定变量的内存值
*指定object的content-type, 如果不指定的话,会根据object的后缀去 mimetypes.class.php 中获取
*指定object的常用HTTP头部 Cache-Control 、 Content-Disposition 、Content-Encoding 、 Expires
*/
$options = array(
    'content' => $content,
    'length' => strlen($content),
    ALIOSS::OSS_HEADERS => array(
        'Expires' => '2012-10-01 08:00:00',
        'Cache-Control' => '2012-10-01 08:00:00',
        'Content-Disposition' => 'just-for-test',
        'Content-Type' => 'text/plain2',
        'Content-Encoding' => 'utf-8',
        'Content-Type' => 'text/plain',
    ),
);
$res = $oss->upload_file_by_content($bucket, $object, $options);    
$msg = "上传字符串到 /" . $bucket . "/" . $object;
OSSUtil::print_res($res, $msg);

/**
*上传时设定设置User Meta
*上传指定变量的内存值
*User Meta 指定用户自定义的以x-oss-meta-开头的信息
*指定object的content-type, 如果不指定的话,会根据object的后缀去 mimetypes.class.php 中获取
*/
$options = array(
    'content' => $content,
    'length' => strlen($content),
    ALIOSS::OSS_HEADERS => array(
        'Content-Type' => 'text/plain',
        'x-oss-meta-self-define-title' => 'user define meta info',
    ),
);
$res = $oss->upload_file_by_content($bucket, $object, $options);    
$msg = "上传字符串到 /" . $bucket . "/" . $object;
OSSUtil::print_res($res, $msg);
以上代码中用到了一个方法是 upload_file_by_content

我在其他地方又看到这样的代码
//向某个bucket上传内容,可以字符串或者文件
function upload(OSSClient $client, $bucket,$key,$content,$type){
      isset($type)?$type:0;
      if($type == 0){
           $type = gettype($content);
           //如果上传内容为数组或者对象,需要进行序列化
           if($type == "array" || $type == "object") {
                $content = serialize($content);
           }
           $client->putObject(array( 'Bucket' => $bucket, 'Key' => $key, 'Content' => $content, ));
      }else{
          $client->putObject(
                   array( 'Bucket' => $bucket,
                          'Key' => $key,
                          'Content' => fopen($content, 'r'),
                          'ContentLength' => filesize($content),
                   ));
      }
}
是一篇13年的文章,我不知道是否值得参考 帖子不允许我发网址
这里面用到的上传方法是putObject

在OSS的API文章中,我也确实看到了put object的相关介绍
Put Object
请求语法
请求Header
细节分析
示例
Put Object

Put Object用于上传文件。
请求语法

PUT /ObjectName HTTP/1.1
Content-Length:ContentLength
Content-Type: ContentType
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue

看了请求语法,我实在不理解这要如何请求,在哪里发出请求,和sdk中的demo是否需要结合,怎样结合。
希望有了解这方面的前辈指教一二,如果有相关的php图片oss上传demo更好,谢谢大家了~


展开
收起
daisy007 2015-10-08 10:54:03 12570 分享 版权
1 条回答
写回答
取消 提交回答
  • 看起来像是Endpoint被填成了qufandian.oss-cn-hangzhou.aliyuncs.com, 去掉看看变成oss-cn-hangzhou.aliyuncs.com看看?
    2015-10-11 00:27:36
    赞同 展开评论