| | |
| | | |
| | | input_json = DataExport.save_export_files(project, now, get_args, data, md5, name) |
| | | |
| | | upload_dir = os.path.join(settings.MEDIA_ROOT, settings.UPLOAD_DIR) |
| | | |
| | | # 调试日志 |
| | | logger.error(f'[Generate Export Debug] ========== Generate Export Started ==========') |
| | | logger.error(f'[Generate Export Debug] Project ID: {project.id}') |
| | | logger.error(f'[Generate Export Debug] Output format: {output_format}') |
| | | logger.error(f'[Generate Export Debug] download_resources: {download_resources}') |
| | | logger.error(f'[Generate Export Debug] hostname: {hostname}') |
| | | logger.error(f'[Generate Export Debug] upload_dir: {upload_dir}') |
| | | logger.error(f'[Generate Export Debug] upload_dir exists: {os.path.exists(upload_dir)}') |
| | | if os.path.exists(upload_dir): |
| | | try: |
| | | logger.error(f'[Generate Export Debug] upload_dir contents: {os.listdir(upload_dir)}') |
| | | except Exception as e: |
| | | logger.error(f'[Generate Export Debug] Error listing upload_dir: {e}') |
| | | logger.error(f'[Generate Export Debug] Task count: {len(tasks)}') |
| | | if tasks: |
| | | first_task = tasks[0] |
| | | logger.error(f'[Generate Export Debug] First task data: {first_task.get("data", {})}') |
| | | logger.error(f'[Generate Export Debug] settings.MEDIA_ROOT: {settings.MEDIA_ROOT}') |
| | | logger.error(f'[Generate Export Debug] settings.UPLOAD_DIR: {settings.UPLOAD_DIR}') |
| | | |
| | | converter = Converter( |
| | | config=project.get_parsed_config(), |
| | | project_dir=None, |
| | | upload_dir=os.path.join(settings.MEDIA_ROOT, settings.UPLOAD_DIR), |
| | | upload_dir=upload_dir, |
| | | download_resources=download_resources, |
| | | access_token=project.organization.created_by.auth_token.key, |
| | | hostname=hostname, |
| | | ) |
| | | |
| | | logger.error(f'[Generate Export Debug] Starting converter.convert...') |
| | | logger.error(f'[Generate Export Debug] input_json: {input_json}') |
| | | |
| | | with get_temp_dir() as tmp_dir: |
| | | logger.error(f'[Generate Export Debug] tmp_dir: {tmp_dir}') |
| | | converter.convert(input_json, tmp_dir, output_format, is_dir=False) |
| | | logger.error(f'[Generate Export Debug] Converter.convert completed') |
| | | |
| | | files = get_all_files_from_dir(tmp_dir) |
| | | logger.error(f'[Generate Export Debug] Output files: {files}') |
| | | logger.error(f'[Generate Export Debug] tmp_dir listing: {os.listdir(tmp_dir)}') |
| | | |
| | | # 检查 images 目录 |
| | | images_dir = os.path.join(tmp_dir, 'images') |
| | | if os.path.exists(images_dir): |
| | | image_files = os.listdir(images_dir) |
| | | logger.error(f'[Generate Export Debug] images/ directory exists with {len(image_files)} files') |
| | | logger.error(f'[Generate Export Debug] Image files: {image_files}') |
| | | else: |
| | | logger.error(f'[Generate Export Debug] images/ directory does NOT exist') |
| | | |
| | | # if only one file is exported - no need to create archive |
| | | if len(os.listdir(tmp_dir)) == 1: |
| | | output_file = files[0] |
| | |
| | | content_type = f'application/{ext}' |
| | | out = path_to_open_binary_file(output_file) |
| | | filename = name + os.path.splitext(output_file)[-1] |
| | | logger.error(f'[Generate Export Debug] Single file export: {filename}') |
| | | logger.error(f'[Generate Export Debug] ========== Generate Export Completed ==========') |
| | | return out, content_type, filename |
| | | |
| | | # otherwise pack output directory into archive |
| | | logger.error(f'[Generate Export Debug] Creating zip archive...') |
| | | shutil.make_archive(tmp_dir, 'zip', tmp_dir) |
| | | out = path_to_open_binary_file(os.path.abspath(tmp_dir + '.zip')) |
| | | content_type = 'application/zip' |
| | | filename = name + '.zip' |
| | | logger.error(f'[Generate Export Debug] Zip created: {filename}') |
| | | logger.error(f'[Generate Export Debug] ========== Generate Export Completed ==========') |
| | | return out, content_type, filename |
| | | |
| | | |