当前位置: 首页 > news >正文

借用python 学习 VM的 FTP(VisionMaster4.3)

无懒不python:看官方V社区有介绍: 需要安装 Quick Easy FTP Server V4.0.0.exe

为了表示敬意再次放出链接:

V社区-机器智能技术交流-VM关于FTP存图的一点分享

好了VM先放一边 先用python自收 自发: 毕竟这个免费

FTP服务端: 0.ftpserver.py

需要安装的库 和 注意事项已经在注视里面说明;

#pip install pyftpdlib
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
r"""
运行之前需要安装好
#pip install pyftpdlib

win10 复制的的路径是这样的
C:\Users\Administrator\Desktop\FTP

路径这么写也没问题
"C:/Users/Administrator/Desktop/FTP/path/to/ftp"
"C:\\Users\\Administrator\\Desktop\\FTP\\path\\to\\ftp"
个人倾向于这种 因为复制过来就这样
r"C:\Users\Administrator\Desktop\FTP"

路径格式:Windows系统,路径需要用双反斜杠 \\ 或者原始字符串 r"C:\FTP"。


权限问题:确保你的Python脚本有权限访问和写入指定的目录。

端口21的权限:默认FTP端口是21,但这个端口需要管理员权限才能监听。你可以选择使用其他端口(如2121),或者以管理员身份运行脚本。


用户名、密码、目录
user", "password" "C:/Users/Administrator/Desktop/FTP/path/to/ftp"

"""

def main():
    # 创建一个授权器,用于管理用户和权限
    authorizer = DummyAuthorizer()

    # 添加一个用户(用户名、密码、目录、权限)
    # 权限说明:
    #   elr = 更改目录、列出文件、读取文件
    #   m = 修改文件(上传、删除、重命名等)
    authorizer.add_user("user", "password", "C:/Users/Administrator/Desktop/FTP/path/to/ftp", perm="elrmw")

    # 添加匿名用户(可选)
    #authorizer.add_anonymous("/path/to/anonymous")

    # 创建FTP处理器
    handler = FTPHandler
    handler.authorizer = authorizer

    # 设置服务器地址和端口 
    server = FTPServer(("0.0.0.0", 21), handler)

    # 启动FTP服务器
    server.serve_forever()

if __name__ == "__main__":
    main()

双击运行它 只要不报错 那么它的效果 和Quick Easy FTP Server V4.0.0.exe 是一样的

好了

接下来继续做 1.ftpupup.py [用于上传图ha片] 且同级目录有一张用于测试的图片

上传不需要安装外部库 标准python3.8 自带的:

#ftplib 不需要安装


#    authorizer.add_user("user", "password", "C:/Users/Administrator/Desktop/FTP/path/to/ftp", perm="elrmw")


from ftplib import FTP

def upload_file_to_ftp(ftp_server, username, password, local_file_path, remote_file_path):
    """
    上传文件到FTP服务器
    :param ftp_server: FTP服务器地址
    :param username: 用户名
    :param password: 密码
    :param local_file_path: 本地文件路径
    :param remote_file_path: 远程文件路径
    """
    try:
        # 创建FTP连接
        ftp = FTP(ftp_server)
        ftp.login(username, password)
        print(f"成功连接到FTP服务器: {ftp_server}")

        # 打开本地文件
        with open(local_file_path, 'rb') as file:
            # 使用STOR命令上传文件
            ftp.storbinary(f'STOR {remote_file_path}', file)
            print(f"文件上传成功: {remote_file_path}")

    except Exception as e:
        print(f"上传文件时发生错误: {e}")
    finally:
        # 关闭FTP连接
        ftp.quit()
        print("FTP连接已关闭")

import os
import time

Plk=os.getcwd()		
		
		
# 示例用法
ftp_server = "127.0.0.1"  # 替换为你的FTP服务器地址
username = "user"      # 替换为你的FTP用户名
password = "password"      # 替换为你的FTP密码
local_file_path = fr"{Plk}/2025-01-21_02_29_24.png"  # 替换为本地图片文件路径


while True:
	SaveFileName=time.strftime('%Y-%m-%d_%H_%M_%S');
	remote_file_path = fr"/{SaveFileName}_ftp.png"  # 替换为FTP服务器上的目标路径
	upload_file_to_ftp(ftp_server, username, password, local_file_path, remote_file_path)
	time.sleep(2)# 2秒钟 更新一次
# 

先运行服务端在运行客户端 可以看到 服务端回显 和 客户端的输出

现在一切正常 打开VM: 拖一个 图像源 脚本 输出图像

图像源设置图像 脚本 输出一个字符串 

out0 = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");

主要是为了获取当前时间用于保存文件名;

接下来输出图像模块:

输入源肯定是 图像源1.图像

存图使能打开; 保存原图打开;

原图路径设置好

[一定要设置原图路径][当打开启用FTP 时原图路径会作为]

借用V社区的话 原图路径:表示 VM 存图在本地哪个文件夹内,本例是在桌面新建了一个名为“中转站”的文件夹。这也说明了 VM 是先将图片存在本地,然后上载至服务端的逻辑过程。

[如果你的电脑足够慢 你可以清楚的看到 原图路径 在上传ftp的时候出现一张图 又消失]

原图命名 继承自  脚本1.out0[] 也就是上面脚本生成的时间字符串

启用FTP 打开

服务器IP 127.0.0.1

服务器端口:21

用户名:user

密码:password

编码格式:UINCODE

FTP路径:\ [一个反斜杠就是根目录 ][反斜杠后面加字符就会创建文件夹]

连接:打开 [ 网络正常 服务器正常  IP 端口 用户名 密码 编码格式 FTP路径 设置好才能打开]

输出使能:打开

像素格式:RGB24

最后吐槽一下 VM 模块参数 界面做的:

界面尺寸又小 ;选项又多,还不能缩放界面尺寸[左右不能改变尺寸算了上下也不能改变],更多选项只能通过 滚轮 或者滑动条 才能看到设置项

单个模块 一张截图又截不完整 得分好几张图截取 大大的不方便学习;

上截图吧.

py的ftp服务端要运行:  VM端点击执行 发现图已经传过去了 效果和1.ftpupup.py 是一样的

最后远程 喊话VM研发 就不能把模块做成这样吗 窗口尺寸可以改变 上下 左右能拖动改变窗口大小 一眼看完所有参数的.???????????   !!!!!

 最后 发现VM 运行FTP传图没有python快 猜测是因为负载原因;

但是VM FTP传图厉害的一点是 不管服务器在不在线 存图模块它都可以正常运行不报错 不红 一旦服务器在线 会自动将 没在线运行的图自动传过去.

此致 敬礼;

相关文章:

  • Spring Boot “约定大于配置”
  • 从零搭建微服务项目(第5章——SpringBoot项目LogBack日志配置+Feign使用)
  • 如何在 Tomcat 中屏蔽错误报告
  • C++学习笔记——模板入门
  • 15、Python面试题解析:列表推导式-条件推导与嵌套推导
  • Unity UI个人总结
  • jsp页面跳转失败
  • 云原生周刊:DeepSeek 颠覆人工智能
  • R语言的软件开发工具
  • 通达信如何导出以往的分时数据
  • Dockfile语法
  • STC 51单片机62——极简 4x4x4光立方
  • 排序之选择排序(C# C++)
  • 蓝桥杯-洛谷刷题-day5(C++)(为未完成)
  • COMDEL电源CDX1000 13.56MHz 2MHz DUAL RF GENERATOR手侧
  • 天地图(uniapp)搜索、定位自己、获取标记点的经纬度
  • 数据结构 day06
  • 【Qt 比较常用的字符串处理函数】查找、比较、转换、截取、替换、插入、删除、格式化、分割、比较排序
  • VSCode Error Lens插件介绍(代码静态检查与提示工具)(vscode插件)
  • 前端实现在PDF上添加标注(1)
  • 上海自聊自做网站/帮收款的接单平台
  • asp.net旅游网站开发文档/seo关键词是什么意思
  • 用群晖nas做网站/小红书关键词检测
  • 泰国一家做男模的网站/深圳网站制作
  • 建筑设计院/搜索引擎内部优化
  • 商城建站模板/高级搜索指令