Python实现不写硬盘上传文件

目录
  • 引言
    • 文本类型
    • 二进制类型
  • 使用 requests 把字符串按照文件上传

引言

你写了一个 api,接受 client 上传的文件,然后在上传到 oss,你会怎么做?先写硬盘,然后在上传到 oss?太笨了!

你写了一个截图服务,截到的图要上传到 oss,你会怎么做?先写硬盘,在上传到 oss?太笨了!

这篇文章教你重新做人!

文本类型

使用 io.StringIO

import io
from loguru import logger
file_like_obj = io.StringIO("hahaha")
logger.debug(file_like_obj)
logger.debug(type(file_like_obj))
logger.debug(getattr(file_like_obj,'read'))
logger.debug(file_like_obj.read())

输出结果如下:

2022-07-11 21:23:51.206 | DEBUG    | __main__:<module>:8 - <_io.StringIO object at 0x100323eb0>
2022-07-11 21:23:51.206 | DEBUG    | __main__:<module>:9 - <class '_io.StringIO'>
2022-07-11 21:23:51.206 | DEBUG    | __main__:<module>:10 - <built-in method read of _io.StringIO object at 0x100323eb0>
2022-07-11 21:23:51.206 | DEBUG    | __main__:<module>:11 - hahaha

再看一个熟悉的:

import io
from loguru import logger
file_like_obj = io.StringIO("hahaha")
with file_like_obj as f:
    logger.debug(f.read())

输出结果如下:

2022-07-11 21:35:04.620 | DEBUG    | __main__:<module>:9 - hahaha

二进制类型

使用 io.BytesIO

使用 requests 把字符串按照文件上传

下面的代码是标准的上传文件的代码:

import requests
import io
response = requests.post('http://localhost:5000/', files={
    'file': open('纵观人类文明史.txt', 'r', encoding='utf-8')
})
print(response.text)

但是我想把 open('纵观人类文明史.txt', 'r', encoding='utf-8') 替换为字符串。为此我想到的办法是把字符串先写到硬盘上,在按照上面的代码上传,可是这太低效率(硬盘太低效率),平白无故多了两次硬盘读写操作,我想直接把内存中的字符串按照文件上传有什么办法吗?

参考文档

https://docs.python.org/zh-cn/3/library/io.html#io.StringIO

以上就是Python实现不写硬盘上传文件的详细内容,更多关于Python不写硬盘上传文件的资料请关注我们其它相关文章!

(0)

相关推荐

  • 基于python实现上传文件到OSS代码实例

    基础环境 # +++++ 阿里云OSS开发指南里都有详细的步骤,在这里整理了一下自己需要的东西 # 确定开发环境,centOS默认安装了python2.7 # python -V # 安装python开发包 # yum install -y python-devel # 安装OSS的sdk # yum install -y python-pip # pip2.7 install oss2 # 验证oss2是否安装正确 ''' >>> import oss2 >>> os

  • python通过http上传文件思路详解

    这里主要是解决multipart/form-data这种格式的文件上传,基本现在http协议上传文件基本上都是通过这种格式上传 1 思路 一般情况下,如果我们往一个地址上传文件,则必须要登陆,登陆成功后,拿到cookies,然后在上传文件的请求携带这个cookies. 然后我们就需要通过浏览器在网站上传文件,这个时候我们需要打开浏览器的开发者工具或者fiddler,然后按照抓到包组装我们的上传文件的post请求 大家把握一个原则就是:在post请求中,用files参数来接受文件对象相关的参数,通

  • Python tornado上传文件的功能

    Tornado是一种 Web 服务器软件的开源版本.Tornado 和主流Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快. 得利于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架. 在web开发过程中,文件上传是经常用到的功能,比如上传附件,上传照片等.下面我们来介绍一下利用tornado 来实现简单的文件上传功能. 普通上传 # coding: u

  • Python request post上传文件常见要点

    通用用法 但上图的字段名,类型需要根据不同接口填写,如某服务接口: 因而对应的上传代码如下: # 输出参数:请求响应报文 import requests request_url = 'https://XXXXX/file-upload' head = { # "Content-Type": "multipart/form-data; boundary=alamofire.boundary.3c7024a080e6a27f", #注意,此处不要写Content-Typ

  • Python requests上传文件实现步骤

    官方文档:https://2.python-requests.org//en/master/ 工作中涉及到一个功能,需要上传附件到一个接口,接口参数如下: 使用http post提交附件 multipart/form-data 格式,url : http://test.com/flow/upload, 字段列表: md5: //md5加密(随机值_当时时间戳) filesize: //文件大小 file: //文件内容(须含文件名) 返回值: {"success":true,"

  • python实现上传文件到linux指定目录的方法

    今天接到一个小需求,就是想在windows环境下,上传压缩文件到linux指定的目录位置并且解压出来,然后我想了一下,这个可以用python试试写下. 环境: 1.linux操作系统一台 2.windows环境安装Python3.x 3.Pycharm IDE环境 大家如果对paramiko模块不熟悉的话,可以去了解哈. 上传文件用到SFTPCLient,SFTPCLient作为一个sftp的客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传.下载.权限.状态. 代码如下 #

  • Python实现不写硬盘上传文件

    目录 引言 文本类型 二进制类型 使用 requests 把字符串按照文件上传 引言 你写了一个 api,接受 client 上传的文件,然后在上传到 oss,你会怎么做?先写硬盘,然后在上传到 oss?太笨了! 你写了一个截图服务,截到的图要上传到 oss,你会怎么做?先写硬盘,在上传到 oss?太笨了! 这篇文章教你重新做人! 文本类型 使用 io.StringIO import io from loguru import logger file_like_obj = io.StringIO

  • python的django写页面上传文件及遇到的问题小结

    首先上结构 mynode -> app5 -> urls.py & views.py | -> templates -> 5 -> upload.html | -> mynode -> urls.py | -> media 按照顺序,先上app5/urls.py from django.urls import path from app5 import views as v5 app_name = 'app5' urlpatterns = [ pat

  • Python调用scp向服务器上传文件示例

    最近做的项目中有一个小功能:在python中调用scp命令 使用ssh登录,然后将指定目录中的图片上传到服务器指定目录 网上搜了很多方法都没用,最后终于碰到一个可以成功上传的,特此记录 import paramiko # 用于调用scp命令 from scp import SCPClient # 将指定目录的图片文件上传到服务器指定目录 # remote_path远程服务器目录 # file_path本地文件夹路径 # img_name是file_path本地文件夹路径下面的文件名称 def u

  • python 使用第三方库requests-toolbelt 上传文件流的示例

    python 使用第三方库requests-toolbelt 上传文件流,内容如下所示: # pip install requests-toolbelt 使用第三方库上传文件流 from requests_toolbelt.multipart.encoder import MultipartEncoder 补充:Python使用requests和requests_toolbelt上传文件 一.文件上传(Form 表单方式)[先将文件读取至内存中,再将内存中的文件信息上传至服务器] 1.单文件上传

  • Python基于requests实现模拟上传文件

    方法1: 1.安装requests_toolbelt依赖库 #代码实现 def upload(self): login_token = self.token.loadTokenList() for token in login_token: tempPassword_url = self.config['crm_test_api']+'/document/upload' tempPassword_data = self.data_to_str.strToDict('''title:1.png c

  • Python利用fastapi实现上传文件

    目录 使用File实现文件上传 使用UploadFile实现文件上传 UploadFile的属性 设置上传文件是可选的 上传多个文件 知识点补充 使用File实现文件上传 使用Form表单上传文件,fastapi使用File获取上传的文件. 指定了参数类型是bytes:file: bytes = File(),此时会将文件内容全部读取到内存,比较适合小文件. 使用File需要提前安装 python-multipart from fastapi import FastAPI, File ​ app

  • Python ftp上传文件

    以下代码比较简单,对python实现ftp上传文件相关知识感兴趣的朋友可以参考下 #encoding=utf8 from ftplib import FTP #加载ftp模块 IP = '103.240.150.104' user = 'webmaster@stchat.cn' password = '5' filename = 'zhihu.html' path = '/root/Desktop/zhihu.html' ftp=FTP() #设置变量 ftp.set_debuglevel(2)

  • python实现的简单FTP上传下载文件实例

    本文实例讲述了python实现的简单FTP上传下载文件的方法.分享给大家供大家参考.具体如下: python本身自带一个FTP模块,可以实现上传下载的函数功能. #!/usr/bin/env python # -*- coding: utf-8 -*- from ftplib import FTP def ftp_up(filename = "20120904.rar"): ftp=FTP() ftp.set_debuglevel(2) #打开调试级别2,显示详细信息;0为关闭调试信息

  • 详解python上传文件和字符到PHP服务器

    很多朋友在留言区询问关于python上传文件和字符到服务器的问题,现编针对这个给大家整理了一个解决办法. 上传简单的字符串 def send_str_server(self): payload = {'key1': 'value1', 'key2': 'value2'} r = requests.post("http://httpbin.org/post", data=payload) 介绍:payload 为键值对形式的数据,在服务器的数据的显示为 key1=value1&k

  • 详解Python下ftp上传文件linux服务器

    模块介绍: from ftplib import FTP ftp = FTP() #设置变量 ftp.set_debuglevel(2) #打开调试级别2 显示详细信息 ftp.connect("IP", "port") #连接ftp, IP和端口 ftp.log("user", "password") #连接的用户名.密码 ftp.cwd(pathname) #设置FTP当前操作的路径 ftp.dir() #显示目录下的文件

随机推荐