首页 > 编程语言 >python request向服务端发送文件

python request向服务端发送文件

时间:2023-10-17 12:11:23浏览次数:41  
标签:__ python request url video path folder save 服务端

本篇文章主要介绍1. 如何使用python request向服务端发送文件 2. 服务端如何接收文件 3. 服务端如何发送文件

  1. 如何使用python request向服务端发送文件
    request.post可以发送file类型
def foo():
    local_url = "http://127.0.0.1:5000/test_api"
    file = {'video': open("/path/to/video.mp4", 'rb')}

    res = requests.post(url=local_url,
                        files=file,
                        data={"filename": "video.mp4"},
                        timeout=100000)
  1. 服务端如何接收文件
    服务端使用flask搭建,可以接受file类型
from flask import Flask, request
app = Flask(__name__)
@app.route("/test_api", methods=['POST'])
def entrypoint():
    # create cache folder
    save_folder = 'tmp'
    if os.path.exists(save_folder):
        shutil.rmtree(save_folder)
    os.mkdir(save_folder)
    # get video
    video = request.files['video']
    filename = request.form['filename']
    # save video
    video_load_path = os.path.join(save_folder, filename)
    video.save(video_load_path)

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)
  1. 服务端发送文件
    基于flask搭建的服务可以使用send_file() 返回文件
from flask import Flask, request
app = Flask(__name__)
@app.route("/test_api", methods=['POST'])
def entrypoint():
    # create cache folder
    save_folder = 'tmp'
    if os.path.exists(save_folder):
        shutil.rmtree(save_folder)
    os.mkdir(save_folder)
    # get video
    video = request.files['video']
    filename = request.form['filename']
    # save video
    video_load_path = os.path.join(save_folder, filename)
    video.save(video_load_path)

    # send file to client
    return send_file(video_load_path, mimetype='video/mp4', as_attachment=True)

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

客户端接收服务端的发送

def foo():
    local_url = "http://127.0.0.1:5000/test_api"
    file = {'video': open("/path/to/video.mp4", 'rb')}

    res = requests.post(url=local_url,
                        files=file,
                        data={"filename": "video.mp4"},
                        timeout=100000)
    with open("response.mp4", 'wb') as f:
        f.write(res.content)

或者也可以把文件通过cdn发送到用于存储文件的地方,并将存储地址返回给用户,用户通过此地址访问文件

VIDEO_UPLOAD_URL = 'http://xxxxx/upload_video.php'

def upload_video(video_bytes):
    files = {
        'file': video_bytes
    }

    try:
        resp = requests.post(VIDEO_UPLOAD_URL, files=files)
        if resp.status_code == 200:
            url = json.loads(resp.text)['url']
            crc = binascii.crc32(video_bytes)
            url = '{}?crc={}&type=5'.format(url, crc)
            return url
        else:
            return None
    except Exception as err:
        logging.error('upload_video failed, error info {}'.format(err))
        return None

from flask import Flask, request
app = Flask(__name__)
@app.route("/test_api", methods=['POST'])
def entrypoint():
    # create cache folder
    save_folder = 'tmp'
    if os.path.exists(save_folder):
        shutil.rmtree(save_folder)
    os.mkdir(save_folder)
    # get video
    video = request.files['video']
    filename = request.form['filename']
    # save video
    video_load_path = os.path.join(save_folder, filename)
    video.save(video_load_path)
    
    # upload video
    video_url = upload_video(open(video_load_path, 'rb').read()) 
    return jsonify({"status": "success", "url": video_url})

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

标签:__,python,request,url,video,path,folder,save,服务端
From: https://www.cnblogs.com/laozhanghahaha/p/17769393.html

相关文章

  • Python网络爬虫基础进阶到实战教程
    认识网络爬虫网络爬虫是指一种程序自动获取网页信息的方式,它能够自动化地获取互联网上的数据。通过使用网络爬虫,我们可以方便地获取到网络上的各种数据,例如网页链接、文本、图片、音频、视频等等。HTML页面组成网页是由HTML标签和内容组成,HTML标签通过标签属性可以定位到需要......
  • python+playwright 学习-39.登录页面滑动解锁
    前言登录页面会遇到滑块解锁,滑动解锁的目的就是为了防止别人用代码登录(也就是为了防止你自动化登录),有些滑动解锁是需要去拼图这种会难一点。有些直接拖到最最右侧就可以了,本篇讲下最简单的直接滑动最右侧的滑块解锁。滑动解锁场景看下图,是我本地写的一个slider.html网页 ......
  • python typing标准库
    1.typing模块1.1typing模块简介typing模块是Python 3.5及以上版本中的一个标准模块,提供了对类型注解和类型提示的支持。该模块中包含了多个类、函数和类型别名等,用于描述函数、方法、变量等的输入和输出类型,以及自定义类型等。typing模块中常用的几个类、函数和类型别名的介......
  • Python中的av入门
    Python中的av入门在Python中,av是一个强大的多媒体处理库,提供了音频和视频的编码、解码、剪辑、合并等功能。本文将介绍av库的安装和基本用法,以帮助你快速入门。安装av库使用pip命令可以方便地安装av库。bashCopycodepipinstallav如果你使用的是conda环境,请使用conda命令安装。ba......
  • Python中的SWIG入门
    Python中的SWIG入门什么是SWIG?SWIG(SimplifiedWrapperandInterfaceGenerator,简化封装和接口生成器)是一个开源工具,用于将C/C++代码转换为各种高级编程语言的接口代码。它允许开发人员在Python等脚本语言中直接使用底层的C/C++代码,以提高开发效率和灵活性。SWIG的优势及应用场......
  • Python中的gym入门
    Python中的gym入门在机器学习和强化学习领域,学习和评估算法的性能通常是非常重要的。为了满足这个需求,OpenAI开发了一个名为gym的Python库。gym提供了一系列标准化的环境,用于开发和比较强化学习算法。安装首先,我们需要安装gym库。打开终端,并执行以下命令:bashCopycodepipinstallg......
  • Python多进程之分享(multiprocessing包)
    threading和multiprocessing(可以阅读Python多线程与同步)multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。该进程可以运行在Python程序内部编写的函数。该Process对象与Thread对象的用法相同,也有start......
  • 给定字符串str= "asdfasdweraasdfasdf", 请python统计每个字符出现的次数,并将结果进行
    str="asdfasdweraasdfasdf"char_count={}forcharinstr:ifcharinchar_count:char_count[char]+=1else:char_count[char]=1forchar,countinchar_count.items():print(f"字符'{......
  • python中predict函数参数:如何使用Python的predict函数进行机器学习预测
    示例示例predict函数是scikit-learn中的一个函数,用于预测新样本的输出结果。参数:predict函数是scikit-learn中的一个函数,用于预测新样本的输出结果。参数:1.X:array-like或spmatrix,shape=[n_samples,n_features],测试样本,其中n_samples表示样本的数量,n_features表示特征的数量。2......
  • 《流畅的Python》 读书笔记 第三章字典和集合 20231017
    第3章字典和集合dict类型是Python语言的基石模块的命名空间、实例的属性和函数的关键字参数中都可以看到字典的身影跟它有关的内置函数都在__builtins__.__dict__模块中模块的命名空间:我的理解是sys.modules实例的属性:我的理解是实例.__dict__classA:def_......