通过
POST /wp/v2/media
端点 创建新附件可以有两种方式:
设置 Content-Disposition
请求头为 attachment; filename=<file name>
,设置 Content-Type
请求头为正确的 MIME 类型,例如 image/jpeg
,然后将请求正文设置为二进制文件内容。
设置 Content-Type
请求头为 multipart/form-data; boundary=<boundary>
,然后将请求正文设置为多部分数据,类似于您可以在这里看到的,其以 ---------------------------<boundary>
开始并以 ---------------------------<boundary>--
结束。
而对于 WordPress,使用此选项的优点是可以设置自定义附件文章数据,例如文章标题和别名。但请确保媒体文件的表单数据名称确切为 file
—— 而不是 filedata
、file_content
或其他名称。
在 R 中,您可以轻松地执行上述操作,只需设置 Authorization
请求头为 Bearer <token>
,并上传 JPEG 图像,如下所示:
基于上述选项 1 的示例
r <- POST(
'https://example.com/wp-json/wp/v2/media',
add_headers(
'Authorization' = paste('Bearer', token, sep = ' '),
'Content-Disposition' = 'attachment; filename="test-using-R-4.0.4.jpg"',
'Content-Type' = 'image/jpeg'
),
body = upload_file('test.jpg', 'image/jpeg')
)
d <- content(r)
cat( ifelse(! is.null(d[['id']]),
paste('success - id:', d['id']),
paste('error:', d['message']))
)
基于上述选项2的示例
r <- POST(
'https://example.com/wp-json/wp/v2/media',
add_headers(
'Authorization' = paste('Bearer', token, sep = ' '),
),
body = list(
file = upload_file('test.jpg', 'image/jpeg'),
title = 'custom title',
slug = 'custom-slug'
)
)
d <- content(r)
cat( ifelse(! is.null(d[['id']]),
paste('success - id:', d['id']),
paste('error:', d['message']))
)
如果您正在使用WordPress 5.6中引入的默认应用程序密码功能,则应使用authenticate()
而不是上述选项2中的add_headers()
:
add_headers(
'Authorization' = paste('Bearer', token, sep = ' '),
),
authenticate('<your WordPress username>', '<your WordPress Application Password>'),
我希望这些示例在 R-4.0.4 中经过了尝试和测试,并且对你也有效。