【经验分享】不同内网服务器之间利用webdav互传文件

news2024/11/25 7:38:59

目录

  • 0、前言
  • 1、授权webdav应用
  • 2、下载webdavclient3
  • 3、替换相关代码

0、前言

最近,我在处理两台服务器间的文件传输问题时遇到了不少难题。这两台服务器并不处于同一内网环境,导致无法通过SFTP进行文件传输。由于这些服务器属于局域网,并且我没有权限修改网络配置,这使得文件传输变得格外头疼,尤其是当文件体积较大时。

为了解决这个问题,我曾尝试通过租用一个云服务器来架设一个中转站。我使用专用客户端连接到服务器B的内网,通过sock5或http协议连接到我的中转服务器。尽管这种方法可行,但由于使用华为云服务器的带宽限制为4Mb,相当于0.5MB/s的传输速度,这让大文件的传输效率极低,让人十分崩溃。

最近发现了支持WebDAV协议的国内123云盘。通过简单的Python编程,实现文件的上传和下载功能,这样就大大减少了对中转服务器的依赖。感觉还是很开心的
123首页

1、授权webdav应用

123云盘注册:123云盘个人中心(有aff)
123云盘注册:123云盘(无aff)
webdav

这里面的服务器地址对应webdav_hostname

账户对应 webdav_login

应用密码对应 webdav_password

【首次使用请创建应用】

2、下载webdavclient3

pip install webdavclient3

3、替换相关代码

请将如下代码中的webdav_hostname、webdav_login、webdav_password 替换成自己的

from webdav3.client import Client
from webdav3.exceptions import RemoteResourceNotFound
import os

# WebDAV配置
config = {
    'webdav_hostname': "*******",
    'webdav_login':    "*******",
    'webdav_password': "*******"
}

def upload_file_or_folder(client, local_path, remote_path):
    if os.path.isdir(local_path):
        # 上传整个文件夹
        client.upload_sync(remote_path=remote_path, local_path=local_path)
        print(f"Folder '{local_path}' has been uploaded to '{remote_path}'.")
    elif os.path.isfile(local_path):
        # 上传单个文件
        client.upload_sync(remote_path=remote_path, local_path=local_path)
        print(f"File '{local_path}' has been uploaded to '{remote_path}'.")
    else:
        print("The specified path does not exist.")

def download_file_or_folder(client, remote_path, local_path):
    try:
        if client.check(remote_path):  # 检查远程路径是否存在
            # 下载文件或文件夹
            client.download_sync(remote_path=remote_path, local_path=local_path)
            print(f"Resource '{remote_path}' has been downloaded to '{local_path}'.")
        else:
            print(f"The resource '{remote_path}' does not exist on the server.")
    except RemoteResourceNotFound:
        print(f"No resource found at '{remote_path}'.")
    except Exception as e:
        print(f"An error occurred: {e}")

def main():
    client = Client(config)
    print('client:', client)
    try:
        print(client.list())
        # # 指定本地路径和远程路径
        local_path = "alphabug.zip"
        remote_path = "数据备份/alphabug.zip"
        
        # 上传文件或文件夹
        upload_file_or_folder(client, local_path, remote_path)
        
        # 下载文件或文件夹
        #download_file_or_folder(client, remote_path, local_path)
    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    main()

我把代码放到了123云盘上,可以直接下载。【如果通过分享链接开通会员会走我的aff】

https://www.123pan.com/s/bixmTd-fBGGh.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1803783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python初步使用教程

1.基本输出print函数 a10 b20 print(a)#输出结束后会自动换行 print(b) print(a,b,猪猪侠)#print中sep决定三者之间会存在空格#连接方法一 print(猪猪,end) print(侠) #连接方法二(只能是字符串和字符串连) print(超级无敌)print(chr(67)) print(ord(猪…

PromptPort:为大模型定制的创意AI提示词工具库

PromptPort:为大模型定制的创意AI提示词工具库 随着人工智能技术的飞速发展,大模型在各行各业的应用越来越广泛。而在与大模型交互的过程中,如何提供精准、有效的提示词成为了关键。今天,就为大家介绍一款专为大模型定制的创意AI…

植物大战僵尸杂交版2024潜艇伟伟迷

在广受欢迎的游戏《植物大战僵尸》的基础上,我最近设计了一款创新的杂交版游戏,简直是太赞了!这款游戏结合了原有游戏的塔防机制,同时引入新的元素、角色和挑战,为玩家提供了全新的游戏体验。 植物大战僵尸杂交版最新绿…

【大模型】基于Hugging Face调用及微调大模型(1)

文章目录 一、前言二、Transformer三、Hugging Face3.1 Hugging Face Dataset3. 2 Hugging Face Tokenizer3.3 Hugging Face Transformer3.4 Hugging Face Accelerate 四、基于Hugging Face调用模型4.1 调用示例4.2 调用流程概述4.2.1 Tokenizer4.2.2 模型的加载4.2.3 模型基本…

软件设计师(中级)概要笔记:基于软件设计师教程(第5版)

文章目录 作者前言1、计算机系统知识1.1、计算机系统基础知识1.1.1 计算机系统硬件基本组成1.1.2 中央处理单元1.1.3、数据表示原码、反码、补码和移码(符号数)符号数的应用定点数和浮点数 1.1.4、校验码奇偶校验循环冗余校验码海明码 1.2、计算机体系…

Day07 待办事项功能页面设计

​ 当前章节待办事项页面设计最终效果图: 一.布局设计 整个 待办事项页面 主要分上下布局,也就是分2行进行设计。第1 行 放搜索框和添加待办按钮,第2行 放置待办事项的内容。 那么 在视图中,怎么将页面分上下2行?就使用到Grid中 的 Grid.RowDefinitions ,就能实现将页面分…

每日5题Day18 - LeetCode 86 - 90

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:86. 分隔链表 - 力扣(LeetCode) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;…

用HAL库改写江科大的stm32入门-输入捕获原理图示

原理与接线: (输入捕获的结构) cubeMx: PA11:

[ssi-uploader插件]解决如何接收服务器返回数据+修改参数名称

前言 ssi-uploader是一款非常好用的多文件上传插件,源码是开源的,在github上面即可下载: https://github.com/ssbeefeater/ssi-uploader 但是源码有些微小的不足,今天我们解决两点问题: 上传文件完成后&#xff0c…

12c rac dg开启日志应用报错 ora-00313 ora-00312 ora-17503 ora-15012处理

错误 当备库开启日志应用后看到告警日志报大量ora-00313\ora-00312\ora-17503等错误 处理方法 SQL> alter database clear unarchived logfile group 1; alter database clear unarchived logfile group 1 * ERROR at line 1: ORA-01156: recovery or flashback in pro…

OpenCV学习(4.7) Canndy边缘检测

1.目标 在本章中,我们将了解 Canny 边缘检测的概念OpenCV 的功能: cv.Canny() Canny边缘检测是一种经典的边缘检测算法,由John F. Canny在1986年提出。Canny算法的目标是找到图像中真正的边缘,同时尽可能…

在nodeJS 中实现langchain 的Agent (实验笔记)

在nodeJS 中实现langchain 的Agent 实验过程记录如下: 1 构建一个Agent ,使用两个工具 Calculator和TavilySearchResults 2 Tavily Search的API key 的获取 之前一直找不到一个合适的搜索引擎,Google Search 被墙,bing Search …

Mysql学习(六)——函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 三、函数3.1 字符串函数3.2 数值函数3.3 日期函数3.4 流程函数 三、函数 函数是指一段可以直接被另一段程序调用的程序或代码。 3.1 字符串函数 MySQL中内置了很…

Linux(Rocky)下 如何输入中文(切换中文输入法)教程

RockyLinux如何输入中文(切换中文输入法) 注意 在字符画界面的Linux系统中 默认不具备中文输入法的功能 需要SSH或其他远程工具来实现 问题 可能大家有的时候安装了一个虚拟机之后 想切换中文输入法 但是一直找不到方法 下面将利用Rocky9.2作为演示…

MT76X8 RF定频使用方法

一、从下面网址下载QA软件包,然后在WIN系统下安装QA环境。https://download.csdn.net/download/zhouwu_linux/89408573?spm1001.2014.3001.5503 在WINDOWS 7系统下先安装WinPcap_4_1_3.exe。 二、硬件连接。 模块上电,PC机 的IP配置成为10.10.18.100&a…

验证码案例

目录 前言 一、Hutool工具介绍 1.1 Maven 1.2 介绍 1.3 实现类 二、验证码案例 2.1 需求 2.2 约定前后端交互接口 2.2.1 需求分析 2.2.2 接口定义 2.3 后端生成验证码 2.4 前端接收验证码图片 2.5 后端校验验证码 2.6 前端校验验证码 2.7 后端完整代码 前言…

App UI 风格,引领时尚

App UI 风格,引领时尚

[创业之路-114] :互联网时代下的扁平化管理趋势与面临的挑战

目录 前言:扁平化管理的时代背景 一、扁平化管理的定义 二、扁平化管理的特点 三、扁平化管理的实施 四、扁平化管理的优势 五、偏平化管理的缺点 六、扁平化管理面临的挑战 七、扁平化管理条件和配套措施 7.1 扁平化管理的条件 7.2 扁平化管理的配套措施…

车载诊断架构 - 引导诊断

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

老旧机子装linux——Xubuntu

目录 前言 正文 下载系统 ​编辑 制作系统盘: 安装界面 Xubuntu ​编辑 lubuntu 后语 前言 有两台电脑,一台装了Ubuntu22,一台装了debuntu。虽然debuntu界面与乌班图大体一样,但是编译器好像有点区别。由于机子为10年前的老…