(self, config: dict, context: ExecutionContext)
| 14 | return "share_folder" |
| 15 | |
| 16 | async def execute(self, config: dict, context: ExecutionContext) -> ModuleResult: |
| 17 | from app.services.file_share import start_file_share, get_local_ip |
| 18 | |
| 19 | folder_path = context.resolve_value(config.get("folderPath", "")) |
| 20 | port = to_int(config.get("port", 8080), 8080, context) |
| 21 | share_name = context.resolve_value(config.get("shareName", "")) or "共享文件夹" |
| 22 | result_variable = config.get("resultVariable", "share_url") |
| 23 | allow_write = config.get("allowWrite", True) # 默认允许写操作 |
| 24 | |
| 25 | if not folder_path: |
| 26 | return ModuleResult(success=False, error="文件夹路径不能为空") |
| 27 | |
| 28 | folder = Path(folder_path) |
| 29 | if not folder.exists(): |
| 30 | return ModuleResult(success=False, error=f"文件夹不存在: {folder_path}") |
| 31 | |
| 32 | if not folder.is_dir(): |
| 33 | return ModuleResult(success=False, error=f"路径不是文件夹: {folder_path}") |
| 34 | |
| 35 | try: |
| 36 | result = start_file_share( |
| 37 | path=str(folder.resolve()), |
| 38 | port=port, |
| 39 | share_type='folder', |
| 40 | name=share_name, |
| 41 | allow_write=allow_write |
| 42 | ) |
| 43 | |
| 44 | if not result['success']: |
| 45 | return ModuleResult(success=False, error=result.get('error', '启动共享服务失败')) |
| 46 | |
| 47 | share_url = result['url'] |
| 48 | local_ip = result['ip'] |
| 49 | |
| 50 | if result_variable: |
| 51 | context.set_variable(result_variable, share_url) |
| 52 | |
| 53 | write_mode = "可上传/删除" if allow_write else "仅下载" |
| 54 | message = f"📂 文件夹共享已启动!\n" \ |
| 55 | f"共享名称: {share_name}\n" \ |
| 56 | f"共享路径: {folder_path}\n" \ |
| 57 | f"访问地址: {share_url}\n" \ |
| 58 | f"权限模式: {write_mode}\n" \ |
| 59 | f"💡 同局域网的设备可以使用浏览器访问上述地址来浏览和下载文件" |
| 60 | |
| 61 | return ModuleResult( |
| 62 | success=True, |
| 63 | message=message, |
| 64 | data={ |
| 65 | 'url': share_url, |
| 66 | 'ip': local_ip, |
| 67 | 'port': port, |
| 68 | 'path': str(folder.resolve()), |
| 69 | 'name': share_name, |
| 70 | 'allowWrite': allow_write |
| 71 | } |
| 72 | ) |
| 73 |
nothing calls this directly
no test coverage detected