如何解决Drupal 8 - 通过 REST API 上传文件
我正在尝试通过 REST API 将文件上传到 Drupal 8。我在 REST 资源中启用了文件资源。
这是我的代码在 JS 中的样子:
const uri = `${constants.URL}/entity/file?_format=json`;
const authorization = `Bearer ${session.accessToken}`;
var reqData = {
"_links":{"type":{"href":`${constants.URL}/rest/type/file/image`}},"uri":{"value":"public://attachements/test.png"},"filename":{"value":"test.png"},"filemime":{"value":"image/png"},"type":{"target_id":"image"},"data":[{"value":"[base64]"}],"uid":[{"target_id":"1"}]
};
请求的结果是:Method Not Allowed。或者各种奇怪的东西,取决于我尝试的不同的东西。
在用户/权限中,我找不到任何可以授予权限的内容。
更新代码 -> '必须指定类型链接关系。'
const uri = `${constants.URL}/entity/file?_format=hal_json`;
const authorization = `Bearer ${session.accessToken}`;
var reqData = {
"_links":{"type":{"href":`${constants.URL}/rest/type/file/image`}},"uri":[{"value":"public://test.png"},{"url":"/sites/default/files/test.png"}],"data":[{"value":`${base64Data}`}],"uid":[{"target_id":"1"}]
};
const response = await axios({
method: 'POST',url: uri,data: {reqData},headers: {
"Content-Type": "application/hal+json","Accept": "application/hal+json","Authorization": authorization
}
})
解决方法
最近我也遇到了这个问题。然后我找到了以下解决方案:
- 安装模块File Entity
- 在 Drupal 核心中启用模块 HAL
- 转到管理菜单 > 配置 > Web 服务 > REST > 编辑
File
资源 > 启用hal_json
格式 - 在您的请求标头中设置
'Content-Type': 'application/hal+json'
响应(使用 Postman):
{
"fid": [
{
"value": 11
}
],"uuid": [
{
"value": "c7c9185f-5394-4f65-90f1-aaa26de384ed"
}
],"langcode": [
{
"value": "en"
}
],"type": [
{
"target_id": "image","target_type": "file_type","target_uuid": "c2f5e03e-f726-4fc0-829f-8727c41b2b95"
}
],"uid": [],"filename": [
{
"value": "test.jpeg"
}
],"uri": [
{
"value": "public://test.jpeg","url": "/sites/default/files/test.jpeg"
}
],"filemime": [
{
"value": "image/jpeg"
}
],"filesize": [
{
"value": 923812
}
],"status": [
{
"value": true
}
],"created": [
{
"value": "2021-03-12T15:22:50+00:00","format": "Y-m-d\\TH:i:sP"
}
],"changed": [
{
"value": "2021-03-12T15:22:50+00:00","field_image_alt_text": [],"field_image_title_text": []
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。