123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- # -*- coding: utf-8 -*-
- import os
- import oss2
- import requests
- import uuid
- # from common import convert_to_pdf
- class MyOSS:
- def __init__(self):
- self.AccessKeyID = 'LTAIPp6YI1JUzpz2'
- self.AccessKeySecret = 'UWc04c4TpUeVot9cYqbkRpU4YhE25S'
- self.bucket_name = 'tederen'
- self.root_name = 'xdcjing'
- self.auth = oss2.Auth(self.AccessKeyID, self.AccessKeySecret)
- self.endpoint = 'http://oss-cn-shanghai.aliyuncs.com'
- self.bucket = oss2.Bucket(self.auth, self.endpoint, self.bucket_name)
- self.domain = 'http://tederen.oss-cn-shanghai.aliyuncs.com'
- def upload_from_str(self,content_str=None,filename=None):
- '''
- 通过字符串上传
- byte,unicode,str
- '''
- filename = os.path.join(self.root_name,filename)
- result = self.bucket.put_object(filename,content_str)
- if result.status == 200:
- url = os.path.join(self.domain,filename)
- else:
- url = ''
- return url
- def upload_from_local(self, localfile=None, ossfile=None):
- '''
- 上传本地文件到oss
- '''
- ossfile = os.path.join(self.root_name, ossfile)
- with open(localfile, 'rb') as fileobj:
- result = self.bucket.put_object(ossfile, fileobj)
- if result.status == 200:
- url = os.path.join(self.domain, ossfile)
- else:
- url = ''
- return url
- def resumable_upload_from_local(self, localfile=None, ossfile=None):
- ossfile = os.path.join(self.root_name, ossfile)
- result = oss2.resumable_upload(self.bucket,ossfile,localfile,
- store=oss2.ResumableStore(root='/tmp'),
- multipart_threshold=100*1024,
- part_size=100*1024,
- num_threads=4,
- progress_callback=self.progress_callback
- )
- if result.status == 200:
- url = os.path.join(self.domain,ossfile)
- else:
- url = ''
- return url
- def upload_from_url(self, url=None, ossfile=None):
- '''
- '''
- ossfile = os.path.join(self.root_name,ossfile)
-
- resp = requests.get(url)
- result = self.bucket.put_object(ossfile,resp)
- if result.status == 200:
- url = os.path.join(self.domain,ossfile)
- else:
- url = ''
- return url
- def upload_from_ajax(self, request, path_name, key):
- """
- 上传文件
- :param request: 请求
- :param path_name: 要存放到服务器上的路径
- :param key: 从request取文件的form的name
- :return: dict
- """
- file_obj = request.FILES.get(key, None)
- if file_obj:
- file_name = file_obj.name.split(".")[0]
- file_type = file_obj.name.split(".")[-1]
- file_size = file_obj.size
- origin_file_name = path_name + str(uuid.uuid1()) + '.' + file_type
- pdf_file_name = path_name + str(uuid.uuid1()) + '.pdf'
- # 把文件写入tmp,上传到server后,删除本地
- tmp_file_name = os.path.join("/tmp", file_obj.name)
- print "tmp_file_name --> ", tmp_file_name
- with open(tmp_file_name, "wb+") as fobj:
- for chunk in file_obj.chunks():
- fobj.write(chunk)
- file_url = MyOSS().resumable_upload_from_local(tmp_file_name,
- origin_file_name)
- result = {"name": file_name, "type": file_type,
- "size": file_size, "url": file_url}
- # 只有资源、任务才进行转换
- if key in ["resource", "task", "url"]:
- res = convert_to_pdf(tmp_file_name)
- print "convert result: -->", res
- # 转换为pdf,再次上传到server
- tmp_pdf_name = os.path.join("/tmp", file_name + ".pdf")
- print "tmp_pdf_name --> ", tmp_pdf_name
- if res:
- pdf_file_url = MyOSS().resumable_upload_from_local(tmp_pdf_name,
- pdf_file_name)
- if pdf_file_url:
- result["pdf_url"] = pdf_file_url
- os.remove(tmp_pdf_name)
- # 删除源文件
- if file_url:
- os.remove(tmp_file_name)
- print "upload_file_info: --> ", result
- else:
- result = {}
- return result
- def progress_callback(self, consumed_bytes, total_bytes):
- if total_bytes:
- rate = int(100*float(consumed_bytes)/float(total_bytes))
- if rate % 50 == 0:
- print '\r{0}%'.format(rate)
-
- if __name__ == '__main__':
- myoss = MyOSS()
- #url = myoss.upload_from_str('test','test/test.txt')
- #print url
- #localfile = 'localtest.txt'
- #ossfile = 'localtooss/text.txt'
- #url = myoss.upload_from_local(localfile,ossfile)
- #print url
- #ossfile = 'test/test.jpg'
- #url = myoss.upload_from_url('http://img.ph.126.net/ocT0cPlMSiTs2BgbZ8bHFw==/631348372762626203.jpg',ossfile)
- #print url
- localfile = 'test.mp4'
- ossfile = 'localtooss/test.mp4'
- url = myoss.resumable_upload_from_local(localfile,ossfile)
- print url
|