def UnzipFile(req: func.HttpRequest) -> func.HttpResponse:
local_download_path="\\temp"
extract_to = "\\unzip"
req_body = req.get_json()
filePath = req_body.get("filePath")
logging.info(f'filePath:{filePath}')
创建服务客户端和文件系统客户端
service_client = get_service_client(os.getenv("CONNECTION_STRING"))
file_system_client = service_client.get_file_system_client(os.getenv("CONTAINER"))
logging.info(f'创建服务客户端和文件系统客户端 file_system_client')
try:
确保下载目录和解压目录存在
os.makedirs(os.path.join( os.getcwd(), local_download_path), exist_ok=True)
os.makedirs(os.path.join( os.getcwd(), extract_to), exist_ok=True)
except Exception as e:
logging.info(f'get local file path:{e}')
try:
下载压缩文件
local_zip_path = os.path.join( os.getcwd(), local_download_path, os.path.basename(filePath))
download_file(file_system_client, filePath, local_zip_path)
extract_to = os.path.join( os.getcwd(), extract_to)
except Exception as e:
logging.info(f'download_file failed:{e}')
logging.info(f'local_zip_path:{local_zip_path}')
logging.info(f'extract_to:{extract_to}')
解压文件
unzip_file(local_zip_path, extract_to)
data = {
'result': 'success',
'message': 'process success.',
'data': [],
'code': 200
}
将 Python 字典转换为 JSON 字符串
json_string = json.dumps(data, indent=4) # indent 参数用于格式化输出
return func.HttpResponse(
json_string,
status_code=200
)
def get_service_client(connection_string):
service_client = DataLakeServiceClient.from_connection_string(connection_string)
return service_client
def download_file(file_system_client, file_path, local_path):
try:
file_client = file_system_client.get_file_client(file_path)
download = file_client.download_file()
with open(local_path, "wb") as local_file:
local_file.write(download.readall())
print(f"Downloaded file to {local_path}")
except Exception as e:
print(e)
def unzip_file(zip_path, extract_to):
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_to)
print(f"Extracted all files to {extract_to}")