mhr*_*ehi 3 java spring http web
我想POST向休息端点发送请求。其余端点文档说:
创建一个节点并将其添加为节点nodeId 的主要子节点。
该端点支持JSON和multipart/form-data(文件上传)。
使用多部分/表单数据
使用filedata字段来表示要上传的内容,例如,以下curl命令将在测试用户的主文件夹中创建一个包含test.txt内容的节点。
curl -utest:测试 -X POST 主机:port/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children -F filedata=@test.txt
您可以使用名称字段为新文件指定替代名称。
您可以使用 nodeType 字段来创建特定类型。默认为 cm:内容
我设法通过以下代码向此端点发送正确的请求:
@Override
public ResponseEntity<byte[]> postNode(String nodeId, byte[] content) {
MultiValueMap<String, Object> bodyMap = new LinkedMultiValueMap<>();
ByteArrayResource contentsAsResource = new ByteArrayResource(content) {
@Override
public String getFilename() {
return "name22222";
}
};
bodyMap.add("filedata", contentsAsResource);
///bodyMap.add("filedata", content);// why this does not work??!
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(bodyMap, headers);
return restTemplate.exchange("/nodes/{nodeId}/children", HttpMethod.POST, requestEntity, byte[].class, nodeId);
}
Run Code Online (Sandbox Code Playgroud)
但我有两个问题:
1 - 为什么注释行不起作用?
2 - 文档说:
您可以使用名称字段为新文件指定替代名称。
我没有使用"name"字段,但服务器使用正确的名称(= "name22222")保存了我的文件,为什么?(我认为multipart/form-data这是一种简单的名称值,如果这是正确的,那么我有一个名为“filedata”的字段,它的值是我的byte数组内容,那么文件名如何发送?)。以及如何用字段指定文件名?
更新:我想我找到了答案。我只需要阅读multipart/form-data!
也许这个示例对于了解如何使用 Spring 上传一个或多个文件很有用。
byte[] fileContent = "testFileContent".getBytes();
String filename = "testFile.xml";
MultiValueMap<String, String> fileMap = new LinkedMultiValueMap<>();
ContentDisposition contentDisposition = ContentDisposition
.builder("form-data")
.name("file")
.filename(filename)
.build();
fileMap.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());
HttpEntity<byte[]> fileEntity = new HttpEntity<>(fileContent, fileMap);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", fileEntity);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
ResponseEntity<String> response = restTemplate
.postForEntity("/import/file, requestEntity, String.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4198 次 |
| 最近记录: |