【发布时间】:2020-07-23 15:36:51
【问题描述】:
我想向休息端点发送POST 请求。其余端点documentation 说:
创建一个节点并将其添加为节点 nodeId 的主要子节点。
此端点同时支持 JSON 和 multipart/form-data(文件 上传)。
使用多部分/表单数据
使用 filedata 字段来表示要上传的内容,例如 例如,以下 curl 命令将创建一个具有 测试用户主文件夹中 test.txt 的内容。
curl -utest:test -X POST 主机:端口/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children -F 文件数据=@test.txt
您可以使用名称字段为新的 文件。
您可以使用 nodeType 字段来创建特定类型。默认 是厘米:内容
我设法通过以下代码向此端点发送了正确的请求:
@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);
}
但我有两个问题:
1 - 为什么注释行不起作用?
2 - 文档说:
您可以使用名称字段为新的 文件。
我没有使用"name" 字段,但是服务器用正确的名称保存了我的文件(="name22222"),为什么?(我认为multipart/form-data 是一种简单的名称-值,如果这样是正确的,那么我有一个名为“filedata”的字段,它的值是我的byte 数组内容,那么文件名是如何发送的?)。以及如何使用字段指定文件名?
更新:
我想我找到了答案。我只需要阅读multipart/form-data!
【问题讨论】: