file_stream.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from config import load_service_config
  2. from io import BytesIO
  3. import os
  4. import pandas as pd
  5. import requests
  6. class FileStreamUtils:
  7. cfgs = load_service_config()
  8. upload_url = cfgs["aliyun"]["upload_url"]
  9. download_url = cfgs["aliyun"]["download_url"]
  10. # cookies = cfgs["aliyun"]['cookies']
  11. # 设置请求头
  12. headers = {
  13. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
  14. "Accept": "*/*",
  15. }
  16. @staticmethod
  17. def upload_files(reports_dir, files):
  18. files_id = {}
  19. for filename in files:
  20. file_path = os.path.join(reports_dir, f'{filename}.xlsx')
  21. try:
  22. with open(file_path, 'rb') as f:
  23. files = {'file': (os.path.basename(file_path), f)}
  24. response = requests.post(
  25. FileStreamUtils.upload_url,
  26. headers=FileStreamUtils.headers,
  27. files=files,
  28. # cookies=FileStreamUtils.cookies,
  29. verify=True
  30. )
  31. if response.json()["success"]:
  32. file_id = response.json()["data"]["file_info"]["fileid"]
  33. files_id[filename] = file_id
  34. except requests.exceptions.RequestException as e:
  35. print("请求出错:", e)
  36. return None
  37. except Exception as e:
  38. return None
  39. return files_id
  40. @staticmethod
  41. def download_file(file_id, file_type='xlsx'):
  42. """通过file_id从阿里云文件数据库下载文件"""
  43. try:
  44. params = {
  45. 'fileid': file_id,
  46. 'action': 'download'
  47. }
  48. response = requests.get(
  49. FileStreamUtils.download_url,
  50. headers=FileStreamUtils.headers,
  51. # cookies=FileStreamUtils.cookies,
  52. params=params,
  53. verify=True
  54. )
  55. if response.status_code == 200:
  56. file_content = BytesIO(response.content)
  57. print('请求成功了')
  58. if file_type == 'xlsx':
  59. data = pd.read_excel(file_content)
  60. elif file_type == 'csv':
  61. data = pd.read_csv(file_content)
  62. else:
  63. raise ValueError(f"不支持的文件类型:{file_type}" )
  64. return data
  65. else:
  66. print(f'请求失败了{response.status_code}')
  67. return None
  68. except requests.exceptions.RequestException as e:
  69. print("Request Error: ", e)
  70. return None
  71. except Exception as e:
  72. print("File download Error: ", e)
  73. return None
  74. if __name__ == '__main__':
  75. # print(FileStreamUtils.cfgs["aliyun"]["cookies"])
  76. file_id = '11C1AC088863421C9BC32A5E722F5147'
  77. data = FileStreamUtils.download_file(file_id)
  78. data.to_excel('./recommend_list.xlsx', index=False)