Jelajahi Sumber

Fix: multi image preview sign (#5376)

Co-authored-by: huangyusong <huangyusong@yingzi.com>
fishisnow 10 bulan lalu
induk
melakukan
e785cbb81d
1 mengubah file dengan 12 tambahan dan 5 penghapusan
  1. 12 5
      api/models/dataset.py

+ 12 - 5
api/models/dataset.py

@@ -425,9 +425,9 @@ class DocumentSegment(db.Model):
     def get_sign_content(self):
         pattern = r"/files/([a-f0-9\-]+)/image-preview"
         text = self.content
-        match = re.search(pattern, text)
-
-        if match:
+        matches = re.finditer(pattern, text)
+        signed_urls = []
+        for match in matches:
             upload_file_id = match.group(1)
             nonce = os.urandom(16).hex()
             timestamp = str(int(time.time()))
@@ -437,8 +437,15 @@ class DocumentSegment(db.Model):
             encoded_sign = base64.urlsafe_b64encode(sign).decode()
 
             params = f"timestamp={timestamp}&nonce={nonce}&sign={encoded_sign}"
-            replacement = r"\g<0>?{params}".format(params=params)
-            text = re.sub(pattern, replacement, text)
+            signed_url = f"{match.group(0)}?{params}"
+            signed_urls.append((match.start(), match.end(), signed_url))
+
+        # Reconstruct the text with signed URLs
+        offset = 0
+        for start, end, signed_url in signed_urls:
+            text = text[:start + offset] + signed_url + text[end + offset:]
+            offset += len(signed_url) - (end - start)
+
         return text