栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

python3关于表单上传文件到服务器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python3关于表单上传文件到服务器

1、在网站中,上传附件前端使用的框架,很多时候无法告诉你,具体的逻辑是什么样的。那么就需要自己分析具体的逻辑是什么样的。

首先,可以抓包查看当前上传文件的接口,例如:

【请求头信息】
POST /XXXX/uploadFileToServer HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryexIQgEmJ4kPcGKob
Accept: */*
Accept-Language: zh-CN,zh-Hans;q=0.9
Accept-Encoding: gzip, deflate
Host: 172.1.1.1:8080
Origin: http://172.1.1.1:8080
Content-Length: 875890
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15
Referer: http://172.1.1.1:8080/index.html
Connection: keep-alive
timestamp: 1654078585604
X-Requested-With: XMLHttpRequest
signature: e5555f052c6939ed897fd08bc2e45445720b8b1c08c235d2b11b53b4acd18954
x-auth-token: yJpZCI6InFpaC54aWUiLCJ1c2VyIjoie1widXNlclwiOntcImRlcHROb1wiOlwiMDAzNjFcIixcImlzU2FsZXNcIjoxLFwibGFzdExvZ2luVGltZVwiOlwiMjAyMjA2MDExODEyMjBcIixcIm1vZGlQd2RGb3JjZVwiOlwiMVwiLFwicHdkRXhwaXJlRGF0ZVwiOlwiMjAyMi0wOC0wMVwiLFwicHdkVHJ5VGltZXNcIjpcIjBcIixcInVzZXJOYW1lXCI6XCLop6PlpYfmmIpcIixcInVzZXJOb1wiOlwicWloLnhpZVwiLFwidXNlclN0YXRlXCI6XCIxXCJ9fSIsImp0aSI6InFpaC54aWUiLCJpc3MiOiJxaWgueGllIiwiaWF0IjoxNjU0MDc4MzQwLCJleHAiOjE2NTQwODE5NDB9.zQZntgqeNh-dCJf6SqgxzVuTytaO-RRpE5c3PiNRvvA

【body参数】

------WebKitFormBoundaryexIQgEmJ4kPcGKob
Content-Disposition: form-data; name="file"; filename="QQ图片20141222110806.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryexIQgEmJ4kPcGKob--

分析:

(1)携带了token,说明是登录状态

(2)文件流的形式传递给服务器

具体代码实现:

class UploadFileToServer(object):
    def __init__(self):
        """
        定义好需要访问的文件上传的请求
        """
        self.url = 'http://{}:{}/uploadFileToServer'.format(vg.SERVICE_IP, vg.SERVICE_PORT)

    def get_content_type(self, filename):
        """
        获取到文件的content类型
        :param filename:
        :return:
        """
        return mimetypes.guess_type(filename)[0] or 'application/octet-stream'

    @log_wrapper('上传文件')
    def upload_file_to_server(self, token, filename=None, headers=None, fields=None):
        global file_path
        if not filename:
            filename = 'readme.txt'
            file_path = get_upload_file_path(filename, 'files') # 这里是获取到文件的路径
        get_content_type = self.get_content_type(file_path)
        if not fields:
            """
            定义data值,传入文件流
            """
            fields = MultipartEncoder(
                fields={
                    'file': ('readme.txt',
                             open(r"{}".format(file_path), "rb"),
                             get_content_type)}
            )

        if not headers:
            """
            重新写入header
            """
            headers = {
                "Content-Type": fields.content_type,
                "x-auth-token": token,
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
            }
        results = requests.post(url=self.url, headers=headers, data=fields)
        return results.content


if __name__ == '__main__':
    test = UploadFileToServer()
    data = Auth().login()
    token = data['data']['token']    # 获取登录的参数
    res = test.upload_file_to_server(token)
    js_d = json.loads(res)  # 转换结果为json格式
    fileName = js_d['data'][0]['fileName']
    fileCode = js_d['data'][0]['fileCode']
    print(fileName, fileCode) # 返回指定的参数

执行完之后:

DEBUG:urllib3.connectionpool:http://171.1.1.1:8080 "POST /uploadFileToServer HTTP/1.1" 200 None
readme.txt  2022060120563512885

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945270.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号