iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >关于文件上传MultipartBody的使用方法
  • 797
分享到

关于文件上传MultipartBody的使用方法

2024-04-02 19:04:59 797人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录文件上传MultipartBody的使用下面给出核心的代码,然后分析一下MultipartBody取出key,value数据,打印参数文件上传MultipartBody的使用 最

文件上传MultipartBody的使用

最近有使用一个文件上传的功能,需要在请求中添加文件,一起传给服务器

OkHttp提供了这个文件添加然后上传的功能

下面给出核心的代码,然后分析一下

//多个文件上传,Filelist
    private static Request getFilesRequest(String url, List<File> files, Map<String, String> maps){
        MultipartBody.Builder builder=  new MultipartBody.Builder().setType(MultipartBody.FORM);
        if(maps==null){
            for(int i = 0;i < files.size();i++){
                builder.addPart( Headers.of("Content-Disposition", "form-data; name=\"file\";filename=\"file.jpg\""),
                        RequestBody.create(MediaType.parse("image/png"),files.get(i))
                ).build();
            }
        }else{
            for (String key : maps.keySet()) {
                String str = maps.get(key);
                builder.addFormDataPart(key,str );
            }
            for(int j = 0;j < files.size();j++){
                long fileSize = files.get(j).length();
                builder.addPart( Headers.of("Content-Disposition", "form-data; name=\"file\";filename=\"file.jpg\";filesize="+fileSize),
                        RequestBody.create(MediaType.parse("image/png"),files.get(j))
                );
            }
        }
        RequestBody body=builder.build();
        return   new Request.Builder().url(url).post(body).build();
    }

先说三个参数吧

  • 三个参数第一个是请求的URL
  • 第二个是Multipart的文件list
  • 第三个是headermap,就是请求的请求头params

首先通过Multipart的Builder模式实例化一个builder

其次如果Header的map为空则直接将file加入到part中

否则依次将headermap 和 file的list中的数据加入到Request中

完成后builder build 出来的MultipartBody 请求赋值给 RequestBody(Multipartbody继承了Requestbody)

之后将Request构建完成即可

Call call =mOkhttpClient.newCall(request);

然后就是用Okhttp 进行请求,请求方法略过

MultipartBody取出key,value数据,打印参数

MultipartBody打印参数比较麻烦

kotlin:

 if (requestBody is MultipartBody) {
            val params = mutableMapOf<String, String>()
            val files = mutableMapOf<String, String>()
            requestBody.parts().forEach {
                val body = it.body()
                it.headers()?.let {
                    val header = it.value(0)
                    val split = header.replace(" ", "").replace("\"", "").split(";")
                    when (split.size) {
                        2 -> {
                            //文本参数
                            val keys = split[1].split("=")
                            if (keys.size > 1 && body.contentLength() < 1024) {
                                val key = keys[1]
                                val buffer = Buffer()
                                body.writeTo(buffer)
                                val value = buffer.readUtf8()
                                params[key] = value
                            }
                        }
                        3 -> {
                            //文件
                            val fileKeys = split[1].split("=")
                            val fileKey = if (fileKeys.size > 1) {
                                fileKeys[1]
                            } else ""
                            val nameValue = split[2].split("=")
                            val fileName = if (nameValue.size > 1) nameValue[1] else ""
                            files[fileKey] = fileName
                        }
                    }
                }
            }
            println("文件-->$files")
            println("文本-->$params")
        }

java写法 

 
        if (requestBody instanceof MultipartBody) {
            MultipartBody body = (MultipartBody) requestBody;
            Map<String, String> params = new HashMap<>();
            Map<String, String> files = new HashMap<>();
            for (MultipartBody.Part part : body.parts()) {
                RequestBody body1 = part.body();
                Headers headers = part.headers();
                if (headers != null && headers.size() > 0) {
                    String[] split = headers.value(0).replace(" ", "").replace("\"", "").split(";");
                    if (split.length == 2) {
                        //文本
                        String[] keys = split[1].split("=");
                        if (keys.length > 1 && body1.contentLength() < 1024) {
                            String key = keys[1];
                            String value = "";
                            Buffer buffer = new Buffer();
                            body.writeTo(buffer);
                            value = buffer.readUtf8();
                            params.put(key, value);
                        }
                    } else if (split.length == 3) {
                        //文件
                        String fileKey = "";
                        String fileName = "";
                        String[] keys = split[1].split("=");
                        String[] names = split[2].split("=");
                        if (keys.length > 1) fileKey = keys[1];
                        if (names.length > 1) fileName = names[1];
                        files.put(fileKey, fileName);
                    }
                }
 
            }
            System.out.println("文本参数-->" + params);
            System.out.println("文件参数-->" + files);
        }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: 关于文件上传MultipartBody的使用方法

本文链接: https://www.lsjlt.com/news/150919.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于文件上传MultipartBody的使用方法
    目录文件上传MultipartBody的使用下面给出核心的代码,然后分析一下MultipartBody取出key,value数据,打印参数文件上传MultipartBody的使用 最...
    99+
    2024-04-02
  • PHP上传文件的使用方法
    本篇内容介绍了“PHP上传文件的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PHP 4.0.3之后PHP又出了一个新函数move_...
    99+
    2023-06-17
  • 关于node使用multer进行文件的上传与下载
    首先了解下浏览器的自动下载: 使用Express静态资源中间件的默认行为是在浏览器中展示静态文件,而不是自动下载。 如果需要访问静态资源时自动下载,可以在HTTP响应中设置Conte...
    99+
    2023-05-16
    node multer multer上传下载
  • 关于vue文件中index.vue的使用方法
    目录vue文件中index.vue使用vue的index.html总结为啥要有index.html单页面应用index.html实战代码汇总vue文件中index.vue使用 <...
    99+
    2022-11-13
    vue index.vue index.vue的使用 vue使用index.vue
  • node.js使用multer中间件上传文件的方法
    这篇文章主要介绍了node.js使用multer中间件上传文件的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。body-parser中间件,其实“极不完美” —— 它只能...
    99+
    2023-06-06
  • 使用sftp命令上传文件夹方法
    # 前言sftp上传单个文件使用put,多个文件可使用mput,但是要上传整个文件夹,则比较复杂,需要使用多个命令组合,包括find、awk等。# sftp上传文件夹```#!/bin/bash sss=`find /ngs/ec...
    99+
    2023-06-06
  • PUT方法上传文件
    HTTP请求方法之一,作用是允许向服务器直接写入文件 (如果服务器开启put方法,我们不需要任何的代码支持,直接就可以上传文件) apache如何开启put方法 正常我们先看一下主机的IP地址是多少 我以这台虚拟机来当例子测试一下这台服务...
    99+
    2023-09-27
    apache php 服务器
  • Asp.Net上传文件并配置可上传大文件的方法
    ASP.NET 包含两个控件可以使用户向网页服务器上传文件。一旦服务器接受了上传的文件数据,那么应用程序就可以进行保存,进行检查或者忽略它。 HtmlInputFile -...
    99+
    2024-04-02
  • 关于上传文件大小受限问题
    一般控制台上会出现像这样   ***1048576 bytes.这大小限制 org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload s...
    99+
    2023-09-30
    java tomcat spring
  • 如何使用大文件上传:秒传、断点续传、分片上传方法
    本篇内容介绍了“如何使用大文件上传:秒传、断点续传、分片上传方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!秒传1、什么是秒传通俗的说,你...
    99+
    2023-06-15
  • 基于HTML5 Ajax文件上传进度条的实现方法
    这篇文章主要介绍“基于HTML5 Ajax文件上传进度条的实现方法”,在日常操作中,相信很多人在基于HTML5 Ajax文件上传进度条的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • Servlet3.0实现文件上传的方法
    Servlet 实现文件上传所谓文件上传就是将本地的文件发送到服务器中保存。例如我们向百度网盘中上传本地的资源或者我们将写好的博客上传到服务器等等就是典型的文件上传。Servlet 3.0上次完成文件下载功能使用的是 Servlet 2.5...
    99+
    2023-05-31
    servlet 文件上传 实现文件
  • SpringMVC上传文件的两种方法
    在该示例中,阐述了SpringMVC如何上传文件。1、上传页面upload.jsp<body> <form action="/TestSpringMVC3/data/uploadfile" enctype="multi...
    99+
    2023-05-30
    springmvc 上传 sprin
  • 关于Java从本地文件复制到网络文件上传
    目录文件复制和文件上传文件复制主要代码测试类执行结果说明网络文件传输(TCP)主要代码执行效果网络文件传输(HTTP)使用 apache 组件实现文件上传使用 Servlet 3.0...
    99+
    2023-05-15
    Java文件 Java复制文件 java文件网络上传
  • 基于java文件上传-原始的Servlet方式
    前言:干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的。刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感觉最不爽的时候,没有归属感,房租还不便宜,...
    99+
    2023-05-31
    java 文件上传 servlet
  • ASP中文件上传组件ASPUpload介绍和使用方法
    ASPUpload是一个用于在ASP网页中实现文件上传的组件。它提供了简单易用的接口和丰富的功能,方便开发者在网页中实现文件上传功能...
    99+
    2023-08-22
    ASP
  • python使用form-data形式上传文件请求的方法
    虽然现在基本上都约定俗成的接口都用json形式请求 但是不可避免地 有些接口需要传文件流,此时就需要用form-data形式上传了 for.e: 存在以下接口,通过接口创建海报图 但...
    99+
    2023-05-18
    form-data上传文件请求form-data上传文件 formdata上传图片
  • asp文件上传的方法有哪些
    1. 使用HTML表单上传文件:可以通过HTML表单中的元素实现文件上传,用户选择文件后,文件会被上传到服务器。2. 使用ASP自带...
    99+
    2023-06-13
    asp文件上传
  • JavaScript大文件上传的处理方法之切片上传
    目录前言切片后上传生成hash文件秒传暂停上传中断请求示例添加暂停上传功能恢复上传添加功能总结前言 本篇介绍了切片上传的基本实现方式(前端),以及实现切片上传后的一些附加功能,切片上...
    99+
    2024-04-02
  • C#实现FTP上传文件的方法
    1.通过用FTP进行上传文件,首先要实现建立FTP连接,一般建立FTP连接,需要知道FTP配置有关的信息。一般要在Bean中建立一个ServiceFileInfo.cs文件进行记录,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作