:art: generate_files_from_qiniu when redis no file base64 string

huangqimin001 9 months ago
parent
commit
b687832779
2 changed files with 31 additions and 2 deletions
  1. 30 1
      api/lensman/contract_mp_views.py
  2. 1 1
      utils/redis/rimage.py

+ 30 - 1
api/lensman/contract_mp_views.py

@@ -1,5 +1,8 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+import base64
4
+
5
+import requests
3 6
 from django_logit import logit
4 7
 from django_response import response
5 8
 from TimeConvert import TimeConvert as tc
@@ -62,15 +65,41 @@ def get_contribtion_contract_api(request):
62 65
     })
63 66
 
64 67
 
68
+def generate_file_from_qiniu(file_url):
69
+    try:
70
+        data = requests.get(file_url).content
71
+        data = base64.b64encode(data).decode('utf-8')
72
+    except Exception:
73
+        data = None
74
+    return data
75
+
76
+
77
+def generate_files_from_qiniu(file_urls):
78
+    files = []
79
+    for file_url in file_urls:
80
+        file_b64str = generate_file_from_qiniu(file_url)
81
+        if not file_b64str:
82
+            continue
83
+        files.append({
84
+            'FileBody': file_b64str,
85
+            'FileName': file_url.split('/')[-1]
86
+        })
87
+    return files
88
+
89
+
65 90
 def upload_contribution_images(contribution_id):
66 91
     # 上传MemberActivityContributionInfo图片 https://qian.tencent.com/developers/companyApis/templatesAndFiles/UploadFiles
67 92
 
68 93
     contribtuon = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id)
69 94
 
70 95
     # TODO: 从 MemberActivityContributionInfo 生成 files 对象
71
-    file_names = [image['image_url'].split('/')[-1] for image in contribtuon.images]
96
+    file_urls = [image['image_url'] for image in contribtuon.images]
97
+    file_names = [file_url.split('/')[-1] for file_url in file_urls]
72 98
     file_type = file_names[0].split('.')[-1]
73 99
     files = get_images_data(file_names)
100
+    # Redis 已无缓存的数据
101
+    if len(files) != len(file_names):
102
+        files = generate_files_from_qiniu(file_urls)
74 103
     # files = [
75 104
     #     {
76 105
     #         "FileBody": "文件base64编码,不含逗号前字符,即data:image/png;base64,",

+ 1 - 1
utils/redis/rimage.py

@@ -21,4 +21,4 @@ def get_images_data(file_names):
21 21
     return [{
22 22
         'FileBody': v,
23 23
         'FileName': k
24
-    } for k, v in zip(file_names, file_b64strs)]
24
+    } for k, v in zip(file_names, file_b64strs) if v]