1 | #! /us/bin/envy python<br>#Author: handle<br>#Update: 2018 - 09 - 29 <br>from optparse import OptionParser<br> import urllib, urllib2<br> import datetime<br> import base64<br> import hmac<br> import sha<br> import os<br> import sys<br> import time<br> class Main():<br> # Initial input parse<br> def __init__(self,options):<br> self.ak = options.ak<br> self.sk = options.sk<br> self.ed = options.ed<br> self.bk = options.bk<br> self.fi = options.fi<br> self.oj = options.objects<br> self.left = '\033[1;31;40m' <br> self.right = '\033[0m' <br> self.types = "application/x-www-form-urlencoded" <br> self.url = 'http://{0}.{1}/{2}' .format(self.bk,self.ed,self.oj)<br> # Check client input parse<br> def CheckParse(self):<br> if (self.ak and self.sk and self.ed and self.bk and self.oj and self.fi) != None:<br> if str(self.ak and self.sk and self.ed and self.bk and self.oj and self.fi):<br> self.PutObject()<br> else :<br> self.ConsoleLog( "error" , "Input parameters cannot be empty" )<br> # GET local GMT time<br> def GetGMT(self):<br> SRM = datetime.datetime.utcnow()<br> GMT = SRM.strftime( '%a, %d %b %Y %H:%M:%S GMT' )<br> return GMT<br> # GET Signature<br> def GetSignature(self):<br> mac = hmac. new ( "{0}" .format(self.sk), "PUT\n\n{0}\n{1}\n/{2}/{3}" .format(self.types,self.GetGMT(),self.bk,self.oj), sha)<br> Signature = base64.b64encode(mac.digest())<br> return Signature<br> # PutObject<br> def PutObject(self):<br> try : <br> with open(self.fi) as fd:<br> files = fd.read()<br> except Exception as e:<br> self.ConsoleLog( "error" ,e)<br> try :<br> request = urllib2.Request(self.url, files)<br> request.add_header( 'Host' , '{0}.{1}' .format(self.bk,self.ed))<br> request.add_header( 'Date' , '{0}' .format(self.GetGMT()))<br> request.add_header( 'Authorization' , 'OSS {0}:{1}' .format(self.ak,self.GetSignature()))<br> request.get_method = lambda: 'PUT' <br> response = urllib2.urlopen(request,timeout= 10 )<br> fd.close()<br> self.ConsoleLog(response.code,response.headers)<br> except Exception,e:<br> self.ConsoleLog( "error" ,e)<br> # output error log<br> def ConsoleLog(self,level=None,mess=None):<br> if level == "error" :<br> sys.exit( '{0}[ERROR:]{1}{2}' .format(self.left,self.right,mess))<br> else :<br> sys.exit( '\nHTTP/1.1 {0} OK\n{1}' .format(level,mess))<br> if __name__ == "__main__" :<br> parser = OptionParser()<br> parser.add_option( "-i" ,dest= "ak" ,help= "Must fill in Accesskey" )<br> parser.add_option( "-k" ,dest= "sk" ,help= "Must fill in AccessKeySecrety" )<br> parser.add_option( "-e" ,dest= "ed" ,help= "Must fill in endpoint" )<br> parser.add_option( "-b" ,dest= "bk" ,help= "Must fill in bucket" )<br> parser.add_option( "-o" ,dest= "objects" ,help= "File name uploaded to oss" )<br> parser.add_option( "-f" ,dest= "fi" ,help= "Must fill localfile path" )<br> (options, args) = parser.parse_args()<br> handler = Main(options)<br> handler.CheckParse() |