世界看热讯:Python实现不写硬盘上传文件
来源:脚本之家    时间:2022-07-14 20:47:50
目录
引言文本类型二进制类型使用 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__::8 - <_io.StringIO object at 0x100323eb0>
2022-07-11 21:23:51.206 | DEBUG | __main__::9 -
2022-07-11 21:23:51.206 | DEBUG | __main__::10 -
2022-07-11 21:23:51.206 | DEBUG | __main__::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__::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不写硬盘上传文件的资料请关注脚本之家其它相关文章!

关键词: 上传文件 文件上传 你会怎么做 二进制类型 相关文章

上一篇:

下一篇:

X 关闭

X 关闭