You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Retrofit2传递包含PDF文件的form-data格式请求体

Retrofit2 同时上传PDF文件与表单字段实现方案

方案1:使用@Multipart注解拆分参数(更直观)

首先调整接口定义,添加@Multipart注解,将文件和普通表单字段拆分为独立的@Part参数:

@Multipart
@POST("filebase/upload")
suspend fun uploadPdfDocument(
    @Header(HEADER_AUTHORIZATION) authorization: String,
    // PDF文件参数
    @Part pdfFile: MultipartBody.Part,
    // 普通表单字段,引号内为后端约定的字段名
    @Part("user_id") userId: RequestBody,
    @Part("file_desc") fileDesc: RequestBody
): UploadPdfDocumetResponse?

构造请求参数后调用接口即可:

// 1. 构造普通表单字段RequestBody
val userId = RequestBody.create("text/plain".toMediaTypeOrNull(), "10001")
val fileDesc = RequestBody.create("text/plain".toMediaTypeOrNull(), "2024年第二季度销售报告")

// 2. 构造PDF文件的MultipartBody.Part
val pdfFile = File(localPdfPath) // 本地PDF文件实例
val pdfRequestBody = RequestBody.create("application/pdf".toMediaTypeOrNull(), pdfFile)
// 第一个参数为后端接收文件的字段名,第二个为上传后展示的文件名
val pdfPart = MultipartBody.Part.createFormData("pdf_document", pdfFile.name, pdfRequestBody)

// 3. 调用接口
val response = apiService.uploadPdfDocument("你的鉴权token", pdfPart, userId, fileDesc)

方案2:保留原有@Body传参接口

如果不想修改现有接口定义,可以手动构造完整的MultipartBody作为请求体传入:

val pdfFile = File(localPdfPath)
val requestBody = MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    // 添加普通表单字段
    .addFormDataPart("user_id", "10001")
    .addFormDataPart("file_desc", "2024年第二季度销售报告")
    // 添加PDF文件
    .addFormDataPart(
        "pdf_document", 
        pdfFile.name, 
        RequestBody.create("application/pdf".toMediaTypeOrNull(), pdfFile)
    )
    .build()

// 直接调用你原有定义的接口
val response = apiService.uploadPdfDocument("你的鉴权token", requestBody)

注意事项

  • 所有字段名(包括文件字段、普通表单字段)必须和后端约定的取值完全一致,否则会出现接收不到参数的问题
  • PDF文件的MediaType需指定为application/pdf,避免后端解析异常
  • 读取本地文件前需确认已申请对应存储权限,Android 10及以上分区存储场景如果无法直接获取File实例,可以通过Uri读取InputStream来构造RequestBody

内容的提问来源于stack exchange,提问作者Parag Rane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:48:02