add uploader
This commit is contained in:
parent
7be263874e
commit
1049136022
|
@ -0,0 +1,62 @@
|
||||||
|
|
||||||
|
# Created by https://www.gitignore.io/api/pycharm
|
||||||
|
|
||||||
|
### PyCharm ###
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
.idea/
|
||||||
|
# User-specific stuff:
|
||||||
|
.idea/workspace.xml
|
||||||
|
.idea/tasks.xml
|
||||||
|
.idea/dictionaries
|
||||||
|
.idea/vcs.xml
|
||||||
|
.idea/jsLibraryMappings.xml
|
||||||
|
|
||||||
|
# Sensitive or high-churn files:
|
||||||
|
.idea/dataSources.ids
|
||||||
|
.idea/dataSources.xml
|
||||||
|
.idea/dataSources.local.xml
|
||||||
|
.idea/sqlDataSources.xml
|
||||||
|
.idea/dynamic.xml
|
||||||
|
.idea/uiDesigner.xml
|
||||||
|
|
||||||
|
# Gradle:
|
||||||
|
.idea/gradle.xml
|
||||||
|
.idea/libraries
|
||||||
|
|
||||||
|
# Mongo Explorer plugin:
|
||||||
|
.idea/mongoSettings.xml
|
||||||
|
|
||||||
|
## File-based project format:
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
## Plugin-specific files:
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
### PyCharm Patch ###
|
||||||
|
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
|
||||||
|
|
||||||
|
# *.iml
|
||||||
|
# modules.xml
|
||||||
|
__pycache__
|
||||||
|
|
||||||
|
*.db
|
||||||
|
*.json
|
||||||
|
config.py
|
||||||
|
cache/
|
||||||
|
venv/
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Uploader
|
||||||
|
|
||||||
|
上传文件到七牛和腾讯云存储
|
||||||
|
|
||||||
|
## 配置
|
||||||
|
|
||||||
|
参考 `config.py.example` 文件,修改 `API key`,修改 `targets` 为要上传的文件或目录
|
||||||
|
|
||||||
|
## 运行
|
||||||
|
|
||||||
|
```shell
|
||||||
|
virtualenv -p python3 venv
|
||||||
|
source venv/bin/activate
|
||||||
|
pip install -r requirements.txt -I
|
||||||
|
python upload.py
|
||||||
|
```
|
||||||
|
|
||||||
|
**crontab**
|
||||||
|
|
||||||
|
```shell
|
||||||
|
10 * * * * /path/to/uploader/cron.sh >> /var/log/uploader.log 2>&1
|
||||||
|
```
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
qn_access_key = "ACCESS_KEY"
|
||||||
|
qn_secret_key = "SECRET_KEY"
|
||||||
|
qn_bucket_name = "BUCKET_NAME"
|
||||||
|
|
||||||
|
cos_app_id = ""
|
||||||
|
cos_bucket_name = ""
|
||||||
|
cos_secret_id = ""
|
||||||
|
cos_key = ""
|
||||||
|
|
||||||
|
targets = ['/var/www/test.json', '/var/www/test_dir']
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo $(date)
|
||||||
|
|
||||||
|
PWD="$(dirname $0)"
|
||||||
|
|
||||||
|
echo "$PWD"
|
||||||
|
|
||||||
|
cd "$PWD" || exit 1
|
||||||
|
|
||||||
|
venv/bin/python upload.py
|
|
@ -0,0 +1,2 @@
|
||||||
|
qiniu == 7.0.7
|
||||||
|
requests == 2.9.1
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
|
||||||
|
import config
|
||||||
|
import uploader
|
||||||
|
|
||||||
|
|
||||||
|
def upload(targets):
|
||||||
|
for target in targets:
|
||||||
|
|
||||||
|
if os.path.isdir(target):
|
||||||
|
upload([os.path.join(target, f) for f in os.listdir(target)])
|
||||||
|
else:
|
||||||
|
if os.path.exists(target):
|
||||||
|
uploader.upload(target)
|
||||||
|
|
||||||
|
upload(config.targets)
|
|
@ -0,0 +1,63 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
|
||||||
|
import qiniu
|
||||||
|
|
||||||
|
import config
|
||||||
|
|
||||||
|
access_key = config.qn_access_key
|
||||||
|
secret_key = config.qn_secret_key
|
||||||
|
bucket_name = config.qn_bucket_name
|
||||||
|
|
||||||
|
cos_app_id = config.cos_app_id
|
||||||
|
cos_bucket_name = config.cos_bucket_name
|
||||||
|
cos_secret_id = config.cos_secret_id
|
||||||
|
cos_key = config.cos_key
|
||||||
|
|
||||||
|
|
||||||
|
def upload(name):
|
||||||
|
upload_file(name)
|
||||||
|
upload_cos(name)
|
||||||
|
|
||||||
|
|
||||||
|
# upload to qiniu
|
||||||
|
def upload_file(file_name):
|
||||||
|
q = qiniu.Auth(access_key, secret_key)
|
||||||
|
|
||||||
|
key = os.path.basename(file_name)
|
||||||
|
|
||||||
|
token = q.upload_token(bucket_name, key)
|
||||||
|
ret, info = qiniu.put_file(token, key, file_name)
|
||||||
|
if ret is not None:
|
||||||
|
print(file_name + ' uploaded.')
|
||||||
|
else:
|
||||||
|
print(info)
|
||||||
|
|
||||||
|
|
||||||
|
# upload to q-cloud cos
|
||||||
|
def upload_cos(file):
|
||||||
|
headers = {
|
||||||
|
'Authorization': sign()
|
||||||
|
}
|
||||||
|
url = 'https://web.file.myqcloud.com/files/v1/' + cos_app_id + '/' + cos_bucket_name + '/' + os.path.basename(file)
|
||||||
|
data = {'op': 'upload', 'insertOnly': '0'}
|
||||||
|
files = {'filecontent': open(file, 'rb')}
|
||||||
|
import requests
|
||||||
|
r = requests.post(url, data=data, files=files, headers=headers)
|
||||||
|
print(r.text)
|
||||||
|
|
||||||
|
|
||||||
|
def sign():
|
||||||
|
import hmac
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
# a=[appid]&b=[bucket]&k=[SecretID]&e=[expiredTime]&t=[currentTime]&r=[rand]&f=
|
||||||
|
import time
|
||||||
|
current_time = int(time.time())
|
||||||
|
sign_text = 'a=' + cos_app_id + '&b=' + cos_bucket_name + '&k=' + cos_secret_id + '&e=' + str(
|
||||||
|
current_time + 3600) + '&t=' + str(current_time) + '&r=123&f='
|
||||||
|
sign_tmp = hmac.new(cos_key.encode(), sign_text.encode(), hashlib.sha1).digest() + sign_text.encode()
|
||||||
|
import base64
|
||||||
|
|
||||||
|
return base64.b64encode(sign_tmp).decode()
|
||||||
|
|
Loading…
Reference in New Issue