java - 在 javax 请求中发布两个 InputStream
问题描述
我正在尝试向采用包含两个文件的表单的端点发送请求。我目前正在尝试的方法在最后一行失败:
WebTarget client = myUtils.createClient(URL, ENDPOINT);
MultivaluedMap<String, InputStream> formData = new MultivaluedHashMap<>();
formData.add(FILE_1, stream1);
formData.add(FILE_2, stream2);
Entity<MultivaluedMap<String, InputStream>> entity = Entity.entity(formData, MediaType.MULTIPART_FORM_DATA_TYPE);
Response response = client.request().post(entity);
达到的错误是
javax.ws.rs.ProcessingException: RESTEASY003215: could not find writer for content-type multipart/form-data type: javax.ws.rs.core.MultivaluedHashMap
更改MediaType
为APPLICATION_FORM_URLENCODED_TYPE
收益率
java.lang.ClassCastException: java.io.SequenceInputStream cannot be cast to java.lang.String
有没有更好的方法来处理 POST 带有两个文件的表单?
解决方案
有多种方法。如果您使用的是泽西岛,一种方法是执行以下操作:
import org.glassfish.jersey.media.multipart.FormDataMultiPart;
import org.glassfish.jersey.media.multipart.file.FileDataBodyPart;
....
....
FileDataBodyPart fileDataBodyPart =
new FileDataBodyPart("file", new File("/filelocation/file.txt"));
FormDataMultiPart formDataMultiPart = (FormDataMultiPart)
FormDataMultiPart.field("somekey","somevalue")
.bodyPart( fileDataBodyPart);
WebTarget target = client.target(restServiceURLYouwant);
Response response = target.request().post(Entity.entity(formDataMultiPart,
formDataMultiPart.getMediaType()));
formDataMultiPart.close();
另一种方法是使用 Apache HttpUtils
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
....
....
MultipartEntity multipartEntity = new MultipartEntity();
FileBody fb = new FileBody(file, "application/octet-stream");
multipartEntity.addPart(fb);
HttpClient httpClient = new DefaultHttpClient() ;
HttpPost httpPostRequest = new HttpPost (url) ;
//url above should be url of the Rest service endpoint
httpPostRequest.setEntity(multiPartEntity) ;
HttpResponse response = httpClient.execute(httpPostRequest) ;
推荐阅读
- php - 如果日期在今年已过,则从明年开始获取
- java - 使用 java spring 应用程序的 SAP RFC 调用
- c# - Xamarin Forms - Prism - OnNavigatedTo 调用两次
- android - 分支 IO 随机应用程序崩溃 - Kotlin
- java - 将 PDF 转换为具有透明度的 png 文件(保留 alpha)
- c# - 当在类上调用点运算符时,C# 在方法上显示文档
- python - ROS PoseStamped 属性错误
- ios - 具有自定义类型的 UIButton 的 IBAction 越来越延迟
- vba - 以编程方式添加自定义文档属性的过程错误
- python - python脚本去除空格