当前位置: 首页 > 知识库问答 >
问题:

在多部分表单数据未到达服务器的情况下改造POST请求

卓嘉良
2023-03-14
val builder = MultipartBody.Builder()
builder.setType(MultipartBody.FORM)
var jsonArray = JSONArray()
for ((index, value) in lineItems.withIndex()) {
    var jsonObject = JSONObject()

    jsonObject.accumulate("Room_id", lineItems[index].roomId)
    jsonObject.accumulate("jobTitle", lineItems[index].jobTitle)
    jsonObject.accumulate("floorLevel", lineItems[index].floorLevel)
    jsonObject.accumulate("jobTrade", lineItems[index].jobArea)
    jsonObject.accumulate("jobWork", lineItems[index].jobWork)
    jsonObject.accumulate("desc", lineItems[index].desc)
    jsonObject.accumulate("isFixed", lineItems[index].isFixed)
    jsonObject.accumulate("hourlyCost", lineItems[index].cost)
    jsonObject.accumulate("hourlyTotal", lineItems[index].total)
    jsonObject.accumulate("hourlyDuration", lineItems[index].duration)
    jsonObject.accumulate("fixedCost", lineItems[index].fixedCost)
    if (lineItems[index].lineItemId!="") {
        jsonObject.accumulate("_id", lineItems[index].lineItemId)
    }
    jsonArray.put(jsonObject)
    Log.d("json array",jsonArray.toString())

}

builder.addFormDataPart("lineHeight", jsonArray.toString())
for ((i, value) in lineItems.withIndex()) {
    var imageList = ArrayList<String>()

    if (lineItems[i].imageList!=null && lineItems[i].imageList!!.size>0) {
        imageList = lineItems[i].imageList!!

        for ((j, path) in imageList.withIndex()) {
            if (!imageList[j].contains("http")) {
                val file = File(path)
                val requestFile = 
                    RequestBody.create(MediaType.parse("image/"+
                    file.name.substring(file.name.indexOf(".")+1)), file)
                val body = MultipartBody.Part.createFormData("photos" + i,
                    file.name, requestFile)
                builder.addPart(body)
            }
        }
    }
 }

val requestBody = builder.build()

以下是呼叫代码:

fun addLineItems(@Header("Authorization") token: String,
                 @Path("jobId") jobId: String,
                 @Body body: okhttp3.RequestBody): Call<Response>

我向一个web服务人员确认,当我从应用程序调用这个API时,他们在日志中没有得到任何东西,而当从Postman调用same时,日志会显示出来。

共有1个答案

汤乐家
2023-03-14

我就是这么试的

这就是我如何准备多部分实体。

File file = new File(currentFilePath);
if (file.exists()) {
String name = URLConnection.guessContentTypeFromName(file.getName());
RequestBody requestFile = RequestBody.create(MediaType.parse(name), file);
MultipartBody.Part multipart = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
}

这是上传文件的方法

@Multipart
@POST("your url")
fun uploadFile(@Header("Authorization") token: String, @Path("jobId") jobId: String,
                @Part file: MultipartBody.Part): Call<Response>
 类似资料:
  • 问题内容: 我正在尝试通过带有POST请求的照片上传 根据自述文件,我应该能够做到这一点 问题是,这不起作用。我收到测试服务器的回复,说它转储了0个post变量。 我已经确认该HTML小页面服务器处于工作状态 所以问题是,请求模块在做什么?有没有更好的方法来发送节点? 问题答案: 经过更多研究后,我决定使用。这使得分段上传非常容易。

  • 试图通过改装将表单数据发送到服务器,但无法向服务器请求。我想用他们的数据发布一个图像数组。 我尝试了许多解决方案,但无法发布包含其数据的图像阵列。当我从addFormDataPart中删除provider\u文档时,效果很好。 如何发送array,它在上运行良好。 请求Api

  • 我需要从客户端发送一个多部分/表单数据POST(xliff文件)到我的Node.js服务器,然后在Node.js捕获数据并将该POST转发到另一个Java服务。 我使用了和来解析表单数据流,并在Node.js中捕获xliff的Buffer,并且都给了我文件,其内容作为缓冲区。 但是,我似乎无法在Node层中重新创建FormData对象来将POST转发到Java服务。 我继续从Java服务中得到错误

  • 我正在使用请求库编写Web服务客户端。我正在获取包含文件和文本json的多部分/表单数据。我不知道如何解析它。是否有合适的库来解析python中的多部分/表单数据格式,或者我应该自己编写解析器? 我的代码: b'\r\n--c00750d1-8ce4-4d29-8390-b50bf02a92cc\r\nContent-Displace: form-data; name="playback Hash

  • 问题内容: 我们想将图像文件作为multipart / form发送到后端,我们尝试使用html表单获取文件并将文件作为formData发送,这是代码 后端中的错误是 “嵌套异常为org.springframework.web.multipart.MultipartException:无法解析多部分servlet请求;嵌套异常为java.io.IOException:org.apache.tomc

  • 我用以下注释注册了rest资源: 当我尝试启动服务器时,我得到以下错误: classCastException:无法将org.glassfish.jersey.ext.cdi1x.transaction.internal.transactionalExceptionInterceptorProvider转换为org.glassfish.jersey.server.spi.componentProv