优化代码,增加添加oss存储 校验功能

super_signature
nineven 5 years ago
parent b32a12a597
commit c46bbc6f75
  1. 3
      fir_client/src/components/FirUserProfileStorage.vue
  2. 1
      fir_ser/api/migrations/0007_auto_20200520_1153.py
  3. 10
      fir_ser/api/utils/storage/aliyunApi.py
  4. 5
      fir_ser/api/utils/storage/localApi.py
  5. 11
      fir_ser/api/utils/storage/qiniuApi.py
  6. 30
      fir_ser/api/utils/storage/storage.py
  7. 9
      fir_ser/api/utils/utils.py
  8. 30
      fir_ser/api/views/storage.py

@ -273,9 +273,10 @@
} }
this.getstorageinfoFun(); this.getstorageinfoFun();
} else {
this.$message.error('操作失败,' + data.msg);
} }
}, {"methods": methods, 'data': this.editstorageinfo}); }, {"methods": methods, 'data': this.editstorageinfo});
this.getstorageinfoFun();
}, del_storage_info(sinfo) { }, del_storage_info(sinfo) {
this.$confirm('此操作可能会导致程序异常, 是否继续?', '警告', { this.$confirm('此操作可能会导致程序异常, 是否继续?', '警告', {

@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('api', '0006_udidsyncdeveloper'), ('api', '0006_udidsyncdeveloper'),
] ]

@ -124,3 +124,13 @@ class AliYunOss(object):
def rename_file(self, oldfilename, newfilename): def rename_file(self, oldfilename, newfilename):
self.bucket.copy_object(self.bucket_name, oldfilename, newfilename) self.bucket.copy_object(self.bucket_name, oldfilename, newfilename)
return self.del_file(oldfilename) return self.del_file(oldfilename)
def upload_file(self, local_file_full_path):
if os.path.isfile(local_file_full_path):
with open(local_file_full_path, 'rb') as fileobj:
# Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。
fileobj.seek(1000, os.SEEK_SET)
# Tell方法用于返回当前位置。
# current = fileobj.tell()
self.bucket.put_object(os.path.basename(local_file_full_path), fileobj)
return True

@ -54,3 +54,8 @@ class LocalStorage(object):
except Exception as e: except Exception as e:
logger.error("rename_file file %s to %s failed Exception %s" % (oldfilename, newfilename, e)) logger.error("rename_file file %s to %s failed Exception %s" % (oldfilename, newfilename, e))
return False return False
def upload_file(self, local_file_full_path):
if os.path.isfile(local_file_full_path):
return True
return False

@ -6,8 +6,9 @@
''' '''
主要是调用七牛云存储处理七牛云存储的逻辑 主要是调用七牛云存储处理七牛云存储的逻辑
''' '''
from qiniu import Auth from qiniu import Auth, put_file, etag
from qiniu import BucketManager from qiniu import BucketManager
import os
class QiNiuOss(object): class QiNiuOss(object):
@ -54,3 +55,11 @@ class QiNiuOss(object):
bucket = BucketManager(self.qiniu_obj) bucket = BucketManager(self.qiniu_obj)
ret, info = bucket.move(self.bucket_name, oldfilename, self.bucket_name, newfilename) ret, info = bucket.move(self.bucket_name, oldfilename, self.bucket_name, newfilename)
return ret return ret
def upload_file(self, local_file_full_path):
if os.path.isfile(local_file_full_path):
filename = os.path.basename(local_file_full_path)
token = self.get_upload_token(filename)
ret, info = put_file(token, filename, local_file_full_path)
if ret['key'] == filename and ret['hash'] == etag(local_file_full_path):
return True

@ -17,9 +17,9 @@ logger = logging.getLogger(__file__)
class Storage(object): class Storage(object):
def __init__(self, user): def __init__(self, user, storage_obj=None):
try: try:
self.storage = self.get_storage(user) self.storage = self.get_storage(user, storage_obj)
except Exception as e: except Exception as e:
logger.error("get %s storage failed Exception:%s" % (user, e)) logger.error("get %s storage failed Exception:%s" % (user, e))
self.storage = None self.storage = None
@ -48,13 +48,29 @@ class Storage(object):
filename = filename + '.apk' filename = filename + '.apk'
else: else:
filename = filename + '.ipa' filename = filename + '.ipa'
try:
return self.storage.del_file(filename) return self.storage.del_file(filename)
except Exception as e:
logger.error("delete file %s failed Exception %s" % (filename, e))
def rename_file(self, oldfilename, newfilename): def rename_file(self, oldfilename, newfilename):
if self.storage: if self.storage:
try:
return self.storage.rename_file(oldfilename, newfilename) return self.storage.rename_file(oldfilename, newfilename)
except Exception as e:
logger.error("rename %s to %s failed Exception %s" % (oldfilename, newfilename, e))
def upload_file(self, local_file_full_path):
if self.storage:
try:
return self.storage.upload_file(local_file_full_path)
except Exception as e:
logger.error("oss upload %s failed Exception %s" % (local_file_full_path, e))
def get_storage(self, user): def get_storage(self, user, storage_obj):
if storage_obj:
self.storage_obj = storage_obj
else:
self.storage_obj = user.storage self.storage_obj = user.storage
if self.storage_obj: if self.storage_obj:
auth = self.get_storage_auth(self.storage_obj) auth = self.get_storage_auth(self.storage_obj)
@ -62,7 +78,7 @@ class Storage(object):
base64.b64encode(json.dumps(auth).encode("utf-8")).decode("utf-8")[0:64]]) base64.b64encode(json.dumps(auth).encode("utf-8")).decode("utf-8")[0:64]])
storage_type = self.storage_obj.storage_type storage_type = self.storage_obj.storage_type
new_storage_obj = cache.get(storage_key) new_storage_obj = cache.get(storage_key)
if new_storage_obj: if new_storage_obj and not storage_obj:
return new_storage_obj return new_storage_obj
else: else:
if storage_type == 1: if storage_type == 1:
@ -76,12 +92,12 @@ class Storage(object):
cache.set(storage_key, new_storage_obj, 600) cache.set(storage_key, new_storage_obj, 600)
return new_storage_obj return new_storage_obj
else: else:
return self.get_default_storage(user) return self.get_default_storage(user, storage_obj)
def get_default_storage(self, user): def get_default_storage(self, user, storage_obj):
admin_obj = UserInfo.objects.filter(is_superuser=True).order_by('pk').first() admin_obj = UserInfo.objects.filter(is_superuser=True).order_by('pk').first()
if admin_obj and admin_obj.storage: if admin_obj and admin_obj.storage:
return self.get_storage(admin_obj) return self.get_storage(admin_obj, storage_obj)
else: else:
storage_lists = THIRD_PART_CONFIG.get('storage') storage_lists = THIRD_PART_CONFIG.get('storage')
for storage in storage_lists: for storage in storage_lists:

@ -4,11 +4,12 @@
# author: liuyu # author: liuyu
# date: 2020/5/7 # date: 2020/5/7
import os import os
from fir_ser.settings import SUPER_SIGN_ROOT, SERVER_DOMAIN, CAPTCHA_LENGTH from fir_ser.settings import SUPER_SIGN_ROOT, SERVER_DOMAIN, CAPTCHA_LENGTH, MEDIA_ROOT
from api.models import APPSuperSignUsedInfo, APPToDeveloper, \ from api.models import APPSuperSignUsedInfo, APPToDeveloper, \
UDIDsyncDeveloper UDIDsyncDeveloper
from api.utils.app.randomstrings import make_app_uuid from api.utils.app.randomstrings import make_app_uuid
from api.utils.storage.localApi import LocalStorage from api.utils.storage.localApi import LocalStorage
from api.utils.storage.storage import Storage
from django.db.models import Sum from django.db.models import Sum
from captcha.models import CaptchaStore from captcha.models import CaptchaStore
from captcha.helpers import captcha_image_url from captcha.helpers import captcha_image_url
@ -104,3 +105,9 @@ def valid_captcha(cptch_key, code, username):
if cptch_key and code and code.strip(" ").lower() == challenge.get("challenge").lower(): if cptch_key and code and code.strip(" ").lower() == challenge.get("challenge").lower():
return True return True
return False return False
def upload_oss_default_head_img(user_obj, storage_obj):
head_img_full_path = os.path.join(MEDIA_ROOT, "head_img.jpeg")
storage_obj = Storage(user_obj, storage_obj)
return storage_obj.upload_file(head_img_full_path)

@ -11,6 +11,7 @@ from rest_framework.response import Response
import json import json
from api.utils.storage.caches import del_cache_storage from api.utils.storage.caches import del_cache_storage
from api.models import AppStorage, UserInfo from api.models import AppStorage, UserInfo
from api.utils.utils import upload_oss_default_head_img
from api.utils.serializer import StorageSerializer from api.utils.serializer import StorageSerializer
import logging import logging
@ -65,9 +66,19 @@ class StorageView(APIView):
serializer = StorageSerializer(data=data, context={'user_obj': request.user}) serializer = StorageSerializer(data=data, context={'user_obj': request.user})
if serializer.is_valid(): if serializer.is_valid():
serializer.save() storage_obj = serializer.save()
if storage_obj:
if upload_oss_default_head_img(request.user, storage_obj):
res.msg = serializer.validated_data res.msg = serializer.validated_data
logger.info("user %s add new storage success" % (request.user)) logger.info("user %s add new storage success" % (request.user))
else:
logger.error("user %s add new storage failed" % (request.user))
res.msg = "文件上传校验失败,请检查参数是否正确"
res.code = 1005
else:
logger.info("user %s add new storage failed" % (request.user))
res.msg = serializer.errors
res.code = 1005
else: else:
logger.info("user %s add new storage failed" % (request.user)) logger.info("user %s add new storage failed" % (request.user))
res.msg = serializer.errors res.msg = serializer.errors
@ -101,12 +112,27 @@ class StorageView(APIView):
storage_id = data.get("id", None) storage_id = data.get("id", None)
if storage_id: if storage_id:
if storage_id == request.user.storage.id:
res.msg = '存储正在使用中,无法修改'
res.code = 1007
return Response(res.dict)
storage_obj = AppStorage.objects.filter(id=storage_id, user_id=request.user).first() storage_obj = AppStorage.objects.filter(id=storage_id, user_id=request.user).first()
serializer = StorageSerializer(instance=storage_obj, data=data, context={'user_obj': request.user}, serializer = StorageSerializer(instance=storage_obj, data=data, context={'user_obj': request.user},
partial=True) partial=True)
if serializer.is_valid(): if serializer.is_valid():
serializer.save() storage_obj = serializer.save()
if storage_obj:
if upload_oss_default_head_img(request.user, storage_obj):
res.msg = serializer.validated_data res.msg = serializer.validated_data
logger.info("user %s add new storage success" % (request.user))
else:
logger.error("user %s add new storage failed" % (request.user))
res.msg = "文件上传校验失败,请检查参数是否正确"
res.code = 1005
else:
logger.info("user %s add new storage failed" % (request.user))
res.msg = serializer.errors
res.code = 1005
else: else:
res.msg = serializer.errors res.msg = serializer.errors
res.code = 1005 res.code = 1005

Loading…
Cancel
Save