首页 > 编程语言 >python实现跨服务器上传文件

python实现跨服务器上传文件

时间:2023-05-01 17:11:35浏览次数:34  
标签:node obj target python request split query 服务器 上传

项目背景

由于需要将算法处理过的视频放进存储服务器上,所以涉及到了跨服务器上传视频、图片等

代码实现

@api_view(['POST'])
def upload(request):
    #定义一个固定的返回值
    response = {'state': 1, 'des': 'normal'}
    # 获取参数
    if request.method == 'POST':
        obj = request.FILES.get('obj')
        des = request.POST.get("des", '')
        number = request.POST.get("number", '')
        person = request.POST.get("person", '')
        time = request.POST.get("time", '')
        # 将文件存入本地
        f = open(obj.name, 'wb')
        for line in obj.chunks():
            f.write(line)
        f.close()
        # 获取文件名以及后缀
        obj_split = obj.name.split(".")
        # if obj_split[-1] in ["jpg","png","jpeg"]:
        # if obj_split[-1] in ["mp4","avi","mkv"]:
        # 从数据库获取存储服务器ip、port、username、password、path等信息
        node_query = NodeManagement.objects.filter(node_type="risk").values()
        host = node_query[0]["ip"]
        port = int(node_query[0]["port"])
        username = node_query[0]["username"]
        password = node_query[0]["password"]
        target_path = node_query[0]["relative_path"]
        transport = paramiko.Transport(host, port)
        # 本地文件路径
        local_file = obj.name
        random_str = ''.join(random.sample(string.ascii_letters + string.digits, 32))
        # 上传服务器文件路径
        print(obj_split[-1])
        if obj_split[-1] in ["jpg","png","webp"]:
            # f = open(obj.name, 'rb')
            # files = {"files": f}
            # dev_risk_image(files)
            # f.close()
            target_file = target_path + random_str +'.'+ obj_split[-1]
        if obj_split[-1] in ["mp4","avi","mkv"]:
            target_file = target_path + random_str +'.'+ obj_split[-1]
        # 建立连接
        transport.connect(username=username, password=password)
        sftp = paramiko.SFTPClient.from_transport(transport)
        # 上传文件
        sftp.put(local_file, target_file)
        os.remove(obj.name)
        # 关闭连接
        transport.close()
        Risk.objects.create(time=datetime.strptime(time, '%Y-%m-%d %H:%M:%S'), path=host + target_file,
                            des=des, person=person, number=number)
    return HttpResponse("success")

标签:node,obj,target,python,request,split,query,服务器,上传
From: https://www.cnblogs.com/beijie/p/17366710.html

相关文章

  • Centos7 安装 python3.9
    今天差点把服务器搞砖了,3.6无法满足要求,3.7一直装不上。重装之前遇到这篇文章,搞定Centos7系统安装Python3.9图文教程......
  • python中find用法
    find()方法常用于在字符串中查找子字符串的位置,它可以帮助我们判断一个字符串中是否包含某个子字符串,以及这个子字符串在字符串中的位置。find()方法的应用场景比较多,下面列举几个常见的使用场景:查找子字符串:可以使用find()方法查找一个字符串中是否包含某个子字符串,并获取......
  • 一道Python初学者常犯错误解析
    1.引言在Python学习中,经常会遇到各种各样的代码错误,尤其对于初学者而言,明明觉得逻辑上是对的,但是代码运行起来,往往不是自己想要的结果。本文就最近在某平台看到的一个常见错误进行展开,帮助大家更好的理解Python的基础语法,,闲话少说,我们直接开始吧!2.问题描述首先,我们来检查以下代码......
  • Linux系统之部署Chrony时间服务器
    (Linux系统之部署Chrony时间服务器)一、Chrony介绍1.Chrony简介Chrony是一个开源自由的网络时间协议NTP的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,Chrony也可以作为服务端软件为其他计算机提供时间同步服务。2.......
  • python 文件目录处理(os模块)
    在Python3中,您可以使用os模块来执行文件和目录操作。下面是一些常见的文件和目录操作及其示例:新建目录要在Python3中新建一个目录,请使用os.mkdir()方法,并将要创建的目录的路径作为参数传递给它。例如:importosos.mkdir('/path/to/new/folder')这将在指定的路径/path/t......
  • python 类与对象
    在Python中,类是一种用户自定义的数据类型,代表着一组具有相同属性和方法的对象。属性是类或实例所拥有的变量,用于描述该对象的特征或状态。一个生活中的例子可以是汽车制造。汽车制造过程中,我们需要设计一个Car类,这个类包含属性(例如颜色,品牌,车型等)和方法(例如启动引擎,前进,刹车等)。......
  • 【python】if __name__=='__main__'
    当我们想一个python文件作为脚本直接执行时才执行某段代码,而被其他python文件调用时不执行那段代码,就可以通过if__name__=='__main__'实现。if__name__=='__main__'只有在python文件作为脚本执行时才为True。python文件直接执行时__name__值为'__main__',被别的文件调用......
  • Python 3 alias All In One
    Python3aliasAllInOnepython3/py3/python#$vim.zshrc$code.zshrc$source~/.zshrc$py3--versionPython3.9.6$python--versionPython3.9.6$python3--versionPython3.9.6$whichpy3py3:aliasedtopython3$whichpythonpython......
  • python操作MongoDB数据库
    python处理mongodb首选就是pymongo.首先,安装一下这个模块pipinstallpymongo建立连接importpymongoconn=pymongo.MongoClient(host='localhost',port=27017)#切换数据库py=conn['python']#登录该数据库(需要的话)py.authenticate("python_admin",'......
  • python 列表推导式
    Python列表推导式是一种简洁而强大的语法结构,可以让你更快地创建、转换和过滤Python列表。它在Python中非常常用,并且是Python程序员必须掌握的技能之一。具体而言,列表推导式是使用一行代码创建新列表的方法。这个代码行由三部分组成:表达式、迭代器和可选的过滤器。表达式是一个......