• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private

    העלאת קבצים גדולים בapi

    עזרה הדדית למשתמשים מתקדמים
    2
    4
    83
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • ש
      שלמה צובל נערך לאחרונה על ידי

      בגלל המגבלה של 50 מ''ב ההעלאה לapi - עשיתי את הפיצול של הקבצים כדי שמעלה גם קבצים גדולים.
      משום מה זה עובד לי רק בקבצים של 70-80 מ''ב,
      אבל קבצים גדולים יותר הוא מעלה לשלוחה קובץ תקול.

      זה הקוד שעשיתי, אשמח מאוד אם מישהו יוכל לבדוק אם יש לי כאן טעות
      def upload_to_ymot(file_path):
      file_size = os.path.getsize(file_path)

      if file_size <= 50 * 1024 * 1024:
          # 🔹 העלאה רגילה
          with open(file_path, "rb") as f:
              files = {"file": (os.path.basename(file_path), f, "audio/wav")}
              data = {
                  "token": YMOT_TOKEN,
                  "path": YMOT_PATH,
                  "convertAudio": "1",
                  "autoNumbering": "true"
              }
              response = requests.post(UPLOAD_URL, data=data, files=files)
          print("📞 תגובת ימות:", response.text)
      else:
          # 🔹 Chunk Upload
          qquuid = str(uuid.uuid4())
          total_parts = math.ceil(file_size / CHUNK_SIZE)
          filename = os.path.basename(file_path)
      
          with open(file_path, "rb") as f:
              for part_index in range(total_parts):
                  chunk = f.read(CHUNK_SIZE)
                  byte_offset = part_index * CHUNK_SIZE
      
                  files = {"qqfile": (filename, chunk, "application/octet-stream")}
                  data = {
                      "token": YMOT_TOKEN,
                      "path": YMOT_PATH,
                      "convertAudio": "1",
                      "autoNumbering": "true",
                      "qquuid": qquuid,
                      "qqpartindex": part_index,       # מתחיל מ-0
                      "qqpartbyteoffset": byte_offset,
                      "qqchunksize": len(chunk),
                      "qqtotalparts": total_parts,     # סה"כ חלקים (לא פחות 1)
                      "qqtotalfilesize": file_size,
                      "qqfilename": filename,
                      "uploader": "yemot-admin"
                  }
      
                  response = requests.post(UPLOAD_URL, data=data, files=files)
                  print(f"⬆️ חלק {part_index+1}/{total_parts} הועלה:", response.text)
      
          # 🔹 בקשת סיום
          data = {
              "token": YMOT_TOKEN,
              "path": YMOT_PATH,
              "convertAudio": "1",
              "autoNumbering": "true",
              "qquuid": qquuid,
              "qqfilename": filename,
              "qqtotalfilesize": file_size,
              "qqtotalparts": total_parts
          }
          response = requests.post(UPLOAD_URL + "?done", data=data)
          print("✅ סיום העלאה:", response.text)
      
      ש צ 2 תגובות תגובה אחרונה תגובה ציטוט 0
      • ש
        שלמה צובל @שלמה צובל נערך לאחרונה על ידי

        לפי הלוג זה נראה שהבעיה שלי היא בבקשת סיום.
        יש פה מישהו שיודע לומר מה לא כתוב לי נכון?

        תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • צ
          צדיק תמים @שלמה צובל נערך לאחרונה על ידי

          @שלמה-צובל מצורף קוד תקין

          import json
          import requests
          import os
          from uuid import uuid4
          
          
          def read_in_chunks(file, chunk_size=5000000):
              while True:
                  data = file.read(chunk_size)
                  if not data:
                      break
                  yield data
          
          def upload_file(file_path, path, token_yemot):
              if os.path.getsize(file_path) > 5000000:
                  content_name = str(os.path.basename(file_path))
                  content_path = os.path.abspath(file_path)
                  content_size = os.stat(content_path).st_size
                  qquuid = str(uuid4())
          
                  file = open(content_path, 'rb')
          
                  chunks = [chunk for chunk in read_in_chunks(file)]
          
                  file.close()
          
                  offset = 0
                  for chunk in chunks:
                      data = {
                              'token': token_yemot,
                              'path': path,
                              'qquuid': qquuid,
                              'convertAudio': 0,
                              'autoNumbering': 'true',
                              'uploader': 'yemot-admin',
                              'qqfilename': content_name,
                              'qqtotalfilesize': content_size,
                              'qqtotalparts': len(chunks),
                              'qqchunksize': len(chunk),
                              'qqpartbyteoffset': offset,
                              'qqpartindex': chunks.index(chunk),
                      }
                      files = {
                          'qqfile': chunk,
                      }
                      res = requests.post('https://www.call2all.co.il/ym/api/UploadFile',
                          data=data,
                          files=files,
                      )
                      offset += len(chunk)
          
          
                  response = requests.post('https://www.call2all.co.il/ym/api/UploadFile?done',{
                      'token': token_yemot, 
                      'path': path, 
                      'uploader': 'yemot-admin',
                      'convertAudio': 0,
                      'autoNumbering': 'true',
                      'qquuid': qquuid,
                      'qqfilename': content_name,
                      'qqtotalfilesize': content_size,
                      'qqtotalparts': len(chunks),
                  })   
                  responses = response.text.split("}{")
                  for idx, response in enumerate(responses):
                      if idx < len(responses) - 1:
                          response = f"{response}"
                      else:
                          response = f"{response}"
                      
                      try:
                          data = json.loads(response)
                          print(response.json())
                          return data
                      except json.JSONDecodeError as e:
                          print("JSON decoding error:", e)
              else:
                  url = 'https://www.call2all.co.il/ym/api/UploadFile'
                  params = {
                      'token': token_yemot,
                      'path': path,
                      'convertAudio': int(1),
                      'autoNumbering': int(1),
                  }
                  files = {'file': open(file_path, 'rb')}
                  response = requests.post(url, params=params, files=files)
                  print(response.json())
                  return response.json()
          
          ש תגובה 1 תגובה אחרונה תגובה ציטוט 1
          • ש
            שלמה צובל @צדיק תמים נערך לאחרונה על ידי

            @צדיק-תמים
            עובד!
            תודה רבה!

            תגובה 1 תגובה אחרונה תגובה ציטוט 1
            • פוסט ראשון
              פוסט אחרון