在 java 中使用 Restlet multipart/form-data 上传文件
Upload a file using Restlet multipart/form-data in java
所以我现在搜索了很多示例代码,但我唯一找到的是服务器端的示例,意思是 接收部分。
我想创建一个应用程序,使用 restlet 上传文件,内容类型:multipart/form-data
。所以我需要发送部分
如何为此创建表单?
我尝试了以下方法,但它不起作用:
public void UploadFile(File f){
Form fileForm = new Form();
fileForm.add(Disposition.NAME_FILENAME, "test.jpg");
Disposition disposition = new Disposition(Disposition.TYPE_INLINE, fileForm);
FileRepresentation entity = new FileRepresentation(f, MediaType.IMAGE_ALL);
entity.setDisposition(disposition);
FormData fd = new FormData("photo", entity);
FormDataSet fds = new FormDataSet();
fds.setMultipart(true);
fds.setMediaType(MediaType.MULTIPART_FORM_DATA);
fds.getEntries().add(fd);
String url = "http://localhost/uploadFile";
Optional<JsonRepresentation> opJrep = m_RestClient.postJson(url,fds,MediaType.MULTIPART_FORM_DATA, Optional.empty());
}
使用以下方法 post 表单并接收 JSON 表示(postJson 含义 post,得到 json 返回)
public Optional<JsonRepresentation> postJson(String url, Object sendObject,MediaType mediaType,Optional<Collection<? extends Header>> headers){
//build resource
ClientResource resource = new ClientResource(url);
//build request with headers
Request request = new Request(Method.POST,url);
headers.ifPresent(col->{
request.getHeaders().addAll(col);
});
//set request
resource.setRequest(request);
//get response
resource.post(sendObject,mediaType);
Representation responseEntity = resource.getResponseEntity();
System.out.println(responseEntity.toString());
try {
//get json representation
JsonRepresentation json = new JsonRepresentation(responseEntity);
return Optional.of(json);
} catch (Exception e) {
}
return Optional.empty();
}
接收服务器应该 return 一个 JSON 字符串,当一切正常时。
Endpoint 实际上不是我的本地主机,而是一个使用 SendPhoto 方法的 Telegram Bot。在那里你可以 post 一个文件作为图像使用 multipart/form-data
我做错了什么?如何使用 restlet 作为 multipart/form-data?
上传文件(在我的例子中是图像)
我用 FormDataSet
进行了一些尝试和错误编程并得到了结果。
要使用 restlet 上传文件(在本例中为图片),您必须执行以下操作:
FileRepresentation entity = new FileRepresentation(file, mediaType); //create the fileRepresentation
FormDataSet fds = new FormDataSet(); //create the FormDataSet
FormData fd = new FormData(key, entity); //create the Formdata using a key and a value (file)
fds.getEntries().add(fd); //add the form data to the set
fds.setMultipart(true); //set the multipart value to true
String url = "http://localhost/uploadPhoto";
Optional<JsonRepresentation> opJrep = m_RestClient.postJson(url,fds,MediaType.MULTIPART_FORM_DATA, Optional.empty());
此示例使用与问题中所述相同的 postJson
方法。
所以我现在搜索了很多示例代码,但我唯一找到的是服务器端的示例,意思是 接收部分。
我想创建一个应用程序,使用 restlet 上传文件,内容类型:multipart/form-data
。所以我需要发送部分
如何为此创建表单?
我尝试了以下方法,但它不起作用:
public void UploadFile(File f){
Form fileForm = new Form();
fileForm.add(Disposition.NAME_FILENAME, "test.jpg");
Disposition disposition = new Disposition(Disposition.TYPE_INLINE, fileForm);
FileRepresentation entity = new FileRepresentation(f, MediaType.IMAGE_ALL);
entity.setDisposition(disposition);
FormData fd = new FormData("photo", entity);
FormDataSet fds = new FormDataSet();
fds.setMultipart(true);
fds.setMediaType(MediaType.MULTIPART_FORM_DATA);
fds.getEntries().add(fd);
String url = "http://localhost/uploadFile";
Optional<JsonRepresentation> opJrep = m_RestClient.postJson(url,fds,MediaType.MULTIPART_FORM_DATA, Optional.empty());
}
使用以下方法 post 表单并接收 JSON 表示(postJson 含义 post,得到 json 返回)
public Optional<JsonRepresentation> postJson(String url, Object sendObject,MediaType mediaType,Optional<Collection<? extends Header>> headers){
//build resource
ClientResource resource = new ClientResource(url);
//build request with headers
Request request = new Request(Method.POST,url);
headers.ifPresent(col->{
request.getHeaders().addAll(col);
});
//set request
resource.setRequest(request);
//get response
resource.post(sendObject,mediaType);
Representation responseEntity = resource.getResponseEntity();
System.out.println(responseEntity.toString());
try {
//get json representation
JsonRepresentation json = new JsonRepresentation(responseEntity);
return Optional.of(json);
} catch (Exception e) {
}
return Optional.empty();
}
接收服务器应该 return 一个 JSON 字符串,当一切正常时。
Endpoint 实际上不是我的本地主机,而是一个使用 SendPhoto 方法的 Telegram Bot。在那里你可以 post 一个文件作为图像使用 multipart/form-data
我做错了什么?如何使用 restlet 作为 multipart/form-data?
上传文件(在我的例子中是图像)我用 FormDataSet
进行了一些尝试和错误编程并得到了结果。
要使用 restlet 上传文件(在本例中为图片),您必须执行以下操作:
FileRepresentation entity = new FileRepresentation(file, mediaType); //create the fileRepresentation
FormDataSet fds = new FormDataSet(); //create the FormDataSet
FormData fd = new FormData(key, entity); //create the Formdata using a key and a value (file)
fds.getEntries().add(fd); //add the form data to the set
fds.setMultipart(true); //set the multipart value to true
String url = "http://localhost/uploadPhoto";
Optional<JsonRepresentation> opJrep = m_RestClient.postJson(url,fds,MediaType.MULTIPART_FORM_DATA, Optional.empty());
此示例使用与问题中所述相同的 postJson
方法。