代理模式上传,服务器转存到存储后端
(
upload_id: str, file: UploadFile = File(...), ip: str = Depends(ip_limit["upload"])
)
| 720 | "/upload/proxy/{upload_id}", dependencies=[Depends(share_required_login)] |
| 721 | ) |
| 722 | async def presign_upload_proxy( |
| 723 | upload_id: str, file: UploadFile = File(...), ip: str = Depends(ip_limit["upload"]) |
| 724 | ): |
| 725 | """代理模式上传,服务器转存到存储后端""" |
| 726 | session = await _get_valid_session(upload_id, expected_mode="proxy") |
| 727 | |
| 728 | file_size = await validate_file_size(file, settings.uploadSize) |
| 729 | if abs(file_size - session.file_size) > 1024: |
| 730 | raise HTTPException(400, "文件大小与声明不符") |
| 731 | |
| 732 | storage: FileStorageInterface = storages[settings.file_storage]() |
| 733 | try: |
| 734 | await storage.save_file(file, session.save_path) |
| 735 | except Exception as e: |
| 736 | raise HTTPException(500, f"文件保存失败: {str(e)}") |
| 737 | |
| 738 | code = await FileUploadService.create_file_record( |
| 739 | session.file_name, |
| 740 | file_size, |
| 741 | os.path.dirname(session.save_path), |
| 742 | session.expire_value, |
| 743 | session.expire_style, |
| 744 | ) |
| 745 | |
| 746 | await session.delete() |
| 747 | ip_limit["upload"].add_ip(ip) |
| 748 | return APIResponse(detail={"code": code, "name": session.file_name}) |
| 749 | |
| 750 | |
| 751 | @presign_api.post( |
nothing calls this directly
no test coverage detected