查看完整版本: [-- Linux下无需任何SDK,一条shell命令搞定签名的上传和下载 --]

开发者论坛 -> 对象存储 OSS -> Linux下无需任何SDK,一条shell命令搞定签名的上传和下载 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

wood23 2015-03-18 21:11

Linux下无需任何SDK,一条shell命令搞定签名的上传和下载

感谢这位大侠 !J3UqS  
tmont.com/blargh/2014/1/uploading-to-s3-in-bash lj4o#^lC  
实现了shell的签名上传 l(!/Q|Q|  
在这个基础上我做了一个OSS的上传和下载的shell命令,有兴趣的可以自己尝试下。 ! \sMR  
`:p1&OS  
使用的前提条件: !X]8dyW  
就是必须安装了openssl和base64,curl这几个bianry,如果没有的,请自行搜索下安装 8PBvV[  
假如将以下代码保存为oss.sh eVJ^\z:4  
并将host,bucket,Id和Key替换成相应的OSS Host,Bucket,Id和Key 2%]Z Kd  
po7>IQS]  
上传: =^tA_AxVw  
sh oss.sh put localfile objectname Ls}7VKl'   
3TS_-l  
成功的结果类似: ,6{iT,~@8  
F9a^ED0l\  
HTTP/1.1 200 OK nL-K)G,  
Date: Wed, 18 Mar 2015 12:55:23 GMT }r%X`i|  
Content-Length: 0 3I  $>uR  
Connection: close ^x m$EY*Y,  
ETag: "A797938C31D59EDD08D86188F6D5B872" oyvKa g  
Server: AliyunOSS Mxl]"?z  
x-oss-request-id: 550975BB9215222B22015250  }ptq )p  
M{mSd2  
下载 h@ )  
sh oss.sh get objectname localfile =0    
S1S;F9F  
._PzYE|m2  
  1. #!/bin/sh 5Qh?>n>*  
    host=需要修改 IzLQhDJ1  
    bucket=需要修改 g(|{')8?d  
    Id=需要修改 )]htm&q5  
    Key=需要修改 ~Z'w)!h  
    = ieag7!  
    _O"mfXl6  
    method=$1 7U|mu~$.!  
    source=$2 S* *oA 6  
    dest=$3 alq%H}FF  
    if test -z "$method" %w7pkh,  
    then oXXC@[??}N  
        method=GET 6CbxuzYer  
    fi C3NdE_E  
    ^Yj xeNY  
    QPt Gdd  
    if [ "get" = ${method} ] || [ "GET" = ${method} ] GL{57  
    then  rl2&^N  
        method=GET XolZonJr  
    elif [ "put" = ${method} ] || [ "PUT" = ${method} ] qqrq11W  
    then '6y}ZE[  
        method=PUT R:Q0=PzDi#  
    else c(;a=n(E#  
        method=GET  -!W<DJ*  
    fi )B,|@ynu  
    if test -z "$dest" u VyGk~  
    then %wcSM~w  
        dest=$source r$Co0!.  
    fi ^j#rZ;uc   
    Sf5X3,Uw  
    %1}K""/  
    if test -z "$method" || test -z "$source" || test -z "$dest" b2b?hA'k  
    then g<{xC_J  
        echo $0 put localfile objectname EI!6MC)  
        echo $0 get objectname localfile %NL^WG:  
        exit -1 bwiPS1+);  
    fi >SPh2[f  
    >h0-;  
    M@0;B30L  
    if [ "put" = ${method} ] || [ "PUT" = ${method} ] E dZ\1'&/9  
    then U- )i+}Ng  
        resource="/${bucket}/${dest}" 8JmFi  
        contentType=`file -ib ${source} |awk -F ";" '{print $1}'` S26MDLk`R3  
        dateValue="`TZ=GMT date +'%a, %d %b %Y %H:%M:%S GMT'`" !uQPc   
        stringToSign="${method}\n\n${contentType}\n${dateValue}\n${resource}" y WV#Up  
        signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${Key} -binary | base64` RV@*c4KvO+  
        url=http://${host}/${resource} M1KqY:9E  
        echo "upload ${source} to ${url}" \=_{na_  
        curl -i -q -X PUT -T "${source}" \ 0RoU}r@z4  
          -H "Host: ${host}" \ HRB<Y mP@  
          -H "Date: ${dateValue}" \ y+7w,m2  
          -H "Content-Type: ${contentType}" \ xyI}y(CN1  
          -H "Authorization: OSS ${Id}:${signature}" \ bV,}Pp+/"!  
          ${url} OpHsob~  
    else itC-4^  
        resource="/${bucket}/${source}" GvBHd%Ot  
        contentType="" 6Fe34n]m  
        dateValue="`TZ=GMT date +'%a, %d %b %Y %H:%M:%S GMT'`" Z?\>JM >;  
        stringToSign="${method}\n\n${contentType}\n${dateValue}\n${resource}" cTG|fdgMW  
        signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${Key} -binary | base64` P#AW\d^"B  
        url=http://${host}/${resource} /~3r;M  
        echo "download ${url} to ${dest}" D*lKn62  
        curl --create-dirs \ EAM5{Nc  
          -H "Host: ${host}" \ :Y[LN  
          -H "Date: ${dateValue}" \ %f]:I  
          -H "Content-Type: ${contentType}" \ 6fw(T.Pe  
          -H "Authorization: OSS ${Id}:${signature}" \ '*3h!lW1.  
          ${url} -o ${dest} H- $)3"K  
    fi
t2)rUWg  

相关文章
Ftp4ossServer能直接从oss拷贝文件到ECS吗? oss防盗链refer能不能不设置为空? Aliyun.OpenServicesSystem.IO.IOException在写入所有字节之前不能关闭流

ftp4oss 2015-03-18 22:40
高手!支持!

中郁 2015-12-03 16:24
神器啊

rockuw 2015-12-03 16:30

boyang.liu 2015-12-03 16:59
高手啊!必须学习一下


你可能还喜欢
支持多人协作登录 企业邮箱加入收取 有人以我邮箱名义 发件人和抄送人 阿里钱盾认证老是 绑定手机号不用了 高手进怎么这么多 希望越来越好 咨询免费云ECS 硬盘扩容什么情况 谷大白话微博 达成战略合作协议 送3张30元代金 一个月了云服务器 小辣椒i2 服务器链接空中卡 各位大哥帮我看看 个人qq邮箱发送 做网站做1个N万 河北百兆独享 邮件作为附件发送 应用宝导出照片失 mac系统提速 macosfil gzip压缩测试 红酒杯有什么讲究 正则表达式表格 word长破折号 win8电脑没有 symfony2 ssh框架整合示 ada语言

查看完整版本: [-- Linux下无需任何SDK,一条shell命令搞定签名的上传和下载 --] [-- top --]


Powered by phpwind v8.5 Code ©2003-2011 phpwind
Gzip disabled