在多部分表单调用中,OKHttp 中参数的正确位置是什么?
What is the correct places for parameters in OKHttp in a multipart form call?
我正在尝试将使用 OKHttp 上传的 jpg 文件复制到 PHP 服务器上的多部分表单。我相信,我在错误的地方得到了一些参数,我不熟悉 http 中的多部分表单和命名法。
这是我想要完成的事情
Post参数(名值对):
myuser,令牌,类型 https://www.somesite.com/jpgphotoupload.php
然后我使用方法 POST 发出多部分表单请求,其中包含以下内容:
路径:https://www.somesite.com/jpgphotoupload.php
文件数据:大小为480 x 640的JPEG压缩图像数据(这个我懂了)
mimeType: image/jpeg (这个我懂了)
不确定应将以下名称值对作为多部分表单请求的一部分放置在哪里,尝试了 addFormDataPart
参数:还是上面的参数形式,(myuser, token, types)
名称:图像文件
文件名: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;
}
就我而言,我需要将视频上传到 Amazon S3 存储桶。这对我有用。
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();
我正在尝试将使用 OKHttp 上传的 jpg 文件复制到 PHP 服务器上的多部分表单。我相信,我在错误的地方得到了一些参数,我不熟悉 http 中的多部分表单和命名法。
这是我想要完成的事情
Post参数(名值对): myuser,令牌,类型 https://www.somesite.com/jpgphotoupload.php
然后我使用方法 POST 发出多部分表单请求,其中包含以下内容: 路径:https://www.somesite.com/jpgphotoupload.php
文件数据:大小为480 x 640的JPEG压缩图像数据(这个我懂了)
mimeType: image/jpeg (这个我懂了)
不确定应将以下名称值对作为多部分表单请求的一部分放置在哪里,尝试了 addFormDataPart
参数:还是上面的参数形式,(myuser, token, types)
名称:图像文件
文件名: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;
}
就我而言,我需要将视频上传到 Amazon S3 存储桶。这对我有用。
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();