【问题标题】:Drupal 8 - Upload file through REST APIDrupal 8 - 通过 REST API 上传文件
【发布时间】:2021-06-07 08:27:45
【问题描述】:

我正在尝试通过 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"}]
};

请求的结果是:方法不允许。或者各种奇怪的东西,取决于我尝试的不同的东西。

在用户/权限内我找不到任何设置来授予权限。


更新代码 -> '必须指定类型链接关系。'

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"}],
  "filename":{"value":"test.png"},
  "filemime":{"value":"image/png"},
  "type":{"target_id":"image"},
  "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
  }
})

【问题讨论】:

    标签: api rest drupal drupal-8


    【解决方案1】:

    最近我也遇到了这个问题。然后我找到了以下解决方案:

    1. 安装模块File Entity
    2. 在 Drupal 核心中启用模块 HAL
    3. 转到管理菜单 > 配置 > Web 服务 > REST > 编辑 File 资源 > 启用 hal_json 格式
    4. 在您的请求标头中设置'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",
                "format": "Y-m-d\\TH:i:sP"
            }
        ],
        "field_image_alt_text": [],
        "field_image_title_text": []
    }
    

    【讨论】:

    • 非常感谢您的建议,我完全按照您的建议做了。但这让我想到了另一个问题:“必须指定类型链接关系。”我在描述中更新了我的代码。您还有其他想法吗?
    • 尝试删除包围redData的花括号:axios({..., data: reqData, ...})
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2018-08-06
    相关资源
    最近更新 更多