Php 在多部分表单调用中,OKHttp中参数的正确位置是什么?

Php 在多部分表单调用中,OKHttp中参数的正确位置是什么?,php,android,forms,https,okhttp,Php,Android,Forms,Https,Okhttp,我正在尝试使用OKHttp将jpg文件上传复制到PHP服务器上的多部分表单。我相信,我在错误的地方得到了一些参数,我不熟悉http中的多部分形式和术语 以下是我试图实现的目标 发布参数(名称-值对): myuser、令牌、类型到 然后,我使用方法POST发出一个多部分表单请求,如下所示: 路径: 文件数据:大小为480 x 640的JPEG压缩图像数据(我理解) mimeType:image/jpeg(我理解) 不确定以下名称-值对应作为多部分表单请求的一部分放置在何处,请尝试addFormDa

我正在尝试使用OKHttp将jpg文件上传复制到PHP服务器上的多部分表单。我相信,我在错误的地方得到了一些参数,我不熟悉http中的多部分形式和术语

以下是我试图实现的目标

发布参数(名称-值对): myuser、令牌、类型到

然后,我使用方法POST发出一个多部分表单请求,如下所示: 路径:

文件数据:大小为480 x 640的JPEG压缩图像数据(我理解)

mimeType:image/jpeg(我理解)

不确定以下名称-值对应作为多部分表单请求的一部分放置在何处,请尝试addFormDataPart

参数:同样是上面的参数形式,(myuser、token、types)

名称:imagefile

文件名:myname.jpg

除此之外,这里还有其他相关内容

            "Connection" , "Keep-Alive"
            "ENCTYPE", "multipart/form-data"
            "Content-Type", "multipart/form-data"
这是我目前拥有的代码

MediaType MEDIA_TYPE_JPG = MediaType.parse("image/jpg");

            OkHttpClient client = new OkHttpClient();
                RequestBody requestBody = new MultipartBuilder()
                        .type(MultipartBuilder.FORM)
                        .addPart(
                                Headers.of("Content-Disposition", "form-data; name=\"imagefile\""),
                                RequestBody.create(MEDIA_TYPE_JPG, new File("/storage/emulated/0/download/camerapic.jpg")))
                        .addFormDataPart("myuser", getprefmyuser(getBaseContext()))
                        .addFormDataPart("token", getpreftoken(getBaseContext()))
                        .addFormDataPart("types", "type1")
                        .addFormDataPart("fileName", "myname.jpg")
                        .build();

                Request request = new Request.Builder()
                        .header("myuser", getprefmyuser(getBaseContext()))
                        .header("token", getpreftoken(getBaseContext()))
                        .header("type", "car")
                        .url("https://www.somesite.com/jpgphotoupload.php")
                        .post(requestBody)
                        .build();

            Response response = null;
            try {
                response = client.newCall(request).execute();
            } catch (IOException e) {
                e.printStackTrace(); 
        ... 

        return null;
        }

在我的例子中,我需要将视频上传到AmazonS3存储桶。这就是我的工作

File sourceFile = new File(myUri);

RequestBody requestBody = new MultipartBuilder()
                    .type(MultipartBuilder.FORM)
                    .addFormDataPart("keyOne", "valueOne")
                    .addFormDataPart("keyTwo", "valueTwo")
                    .addFormDataPart("file", "myFileName", RequestBody.create(MediaType.parse("video/quicktime"), sourceFile))
                    .build();

我需要上传一个在移动设备上捕获的视频,所以我猜测
.mp4
,那么我应该为
RequestBody.create(MediaType.parse(“video/quicktime”),sourceFile)指定什么?我是否仍然使用
quicktime
?(我对视频了解不多)你的视频来源是一个文件吗?与
新文件(myFileName)
中一样?这里我假设myFileName是之前传递的确切值。是的,我的视频源是提供的代码中的
sourceFile
(写入磁盘的视频文件)。IIRC,
myFileName
是您告诉它的文件名,可以是您想要的任何名称。
文件
对象用于获取数据,但我认为原始uri/名称并不重要。谢谢。那么前面评论中的
quicktime
部分呢?实际上,我不完全确定。现在来看,我们似乎已经更改了代码。我们现在将contentType设置为
video/3gp
。我们现在也使用亚马逊的图书馆,所以我找不到我最初在这里做的事情。如果你想这样做,你可以把它们放在你的
build.gradle
依赖项下--
编译'com.amazonaws:aws-android-sdk-s3:2.2.7'
--
编译'com.amazonaws:aws-android-sdk-core:2.2.7'