Hỏi đáp về api

Discussion in 'Thảo Luận Chung' started by mankun_noob, Apr 27, 2023.

  1. mankun_noob

    mankun_noob Tân Thủ Thôn

    Chuyện là em có code 1 đoạn code up ảnh lên web qua api. Mà em thấy nó lâu quá , lâu hơn em up tay trong khi code nó còn chạy 4 luồng.
    Cụ thể em up vài trăm ảnh tổng dung lương khoảng 420mb mà mất hơn 20p.
    Em muốn hỏi là cái này là do bên phía sever hay là do code chưa tối ưu ạ (bên web không có giới hạn gì về upload hay request gì cả)
    Code của em đây ạ
    Code:
    def upload_image_worker(url, api, image_path):
        # Mã hoá ảnh
        try:
            with open(image_path, "rb") as image_file:
                encoded_string = base64.b64encode(image_file.read())
        except Exception as e:
            return 'Lỗi'
        # Tải ảnh lên sever
        try:
            response = requests.post(url, data={'source': encoded_string, 'action': 'upload', 'format': 'json', 'key': api})
            response_json = response.json()
    
            if response.status_code == 200 and response_json['status_code'] == 200:
                return response_json['image']['url']
            else:
                return 'Lỗi' # thông báo ảnh lỗi
        except Exception as e:
            return 'Lỗi' # thông báo ảnh lỗi
    
    def upload_image(url, api, list_image):
        uploaded_images = []
       
        with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
            futures = [executor.submit(upload_image_worker, url, api, image_path) for image_path in list_image]
            for future in concurrent.futures.as_completed(futures):
                result = future.result()
                uploaded_images.append(result)
       
        return uploaded_images
     
  2. firefox

    firefox Bang Chúng

    upload ảnh dùng base64 nó lâu là đúng rồi, nó lâu từ lúc encode tới lúc transfer sau đó decode, mình phải dùng multipart-form hoặc gì đó binary hơn một chút chứ
     
    mankun_noob and xmenvn2510 like this.
  3. mankun_noob

    mankun_noob Tân Thủ Thôn

    Dạ em cảm ơn anh ạ . Anh có thể cho em xin thông tin chi tiết hơn 1 chút được không ạ. Tại cái tài liệu api nó bắt phải xài cái mã hoá base64 cho hình ảnh .
    Tài liệu api của nó đây ạ : https://v4-docs.chevereto.com/developer/api/api-v1.html#request-url Anh xem giúp em xem hay là do em hiểu sai cái nó yêu cầu ạ {adore}
     
  4. thanh858036

    thanh858036 Sơ Nhập Giang Hồ

    nó cho xài file kìa
    Code:
    import requests
    
    url = "https://imagem.app/api/1/upload"
    
    payload = {'key': 'YOUR_KEY','format': 'json'}
    
    files = [
      ('source', open('imagem.png','rb'))
    ]
    
    response = requests.request("POST", url, data = payload, files = files)
    
    print(response.text.encode('utf8'))
     
  5. mankun_noob

    mankun_noob Tân Thủ Thôn

    Em cảm ơn bác ạ {loveyou}