【发布时间】:2020-12-16 11:13:48
【问题描述】:
我有一个 Shopware 6.3 商店,需要使用集成 API 将图像迁移到该商店。
我应该如何为媒体上传构建正文?我需要将文件放在某个地方还是只传递链接?
我已通过此处的指南将新产品推入 Shopware:https://docs.shopware.com/en/shopware-platform-dev-en/admin-api-guide/writing-entities?category=shopware-platform-dev-en/admin-api-guide#creating-entities,但我不确定如何处理媒体。在本指南中,仅说明了如何在此处https://docs.shopware.com/en/shopware-platform-dev-en/admin-api-guide/writing-entities?category=shopware-platform-dev-en/admin-api-guide#media-handling 中创建已上传的媒体文件与产品之间的链接,但没有关于如何实际推送媒体文件的示例。
我有我需要的每张图片的 URL(在数据库中,以及产品 ID 和图片位置)。
实体架构将媒体描述为:
"media": {
"name": "media",
"translatable": [
"alt",
"title",
"customFields"
],
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"userId": {
"type": "string",
"format": "uuid"
},
"mediaFolderId": {
"type": "string",
"format": "uuid"
},
"mimeType": {
"type": "string",
"readOnly": true
},
"fileExtension": {
"type": "string",
"readOnly": true
},
"uploadedAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"fileName": {
"type": "string",
"readOnly": true
},
"fileSize": {
"type": "integer",
"format": "int64",
"readOnly": true
},
"metaData": {
"type": "object",
"readOnly": true
},
"mediaType": {
"type": "object",
"readOnly": true
},
"alt": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"hasFile": {
"type": "boolean"
},
"private": {
"type": "boolean"
},
"customFields": {
"type": "object"
},
"createdAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updatedAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"translated": {
"type": "object"
},
"tags": {
"type": "array",
"entity": "tag"
},
"thumbnails": {
"type": "array",
"entity": "media_thumbnail"
},
"user": {
"type": "object",
"entity": "user"
},
"categories": {
"type": "array",
"entity": "category"
},
"productManufacturers": {
"type": "array",
"entity": "product_manufacturer"
},
"productMedia": {
"type": "array",
"entity": "product_media"
},
"avatarUser": {
"type": "object",
"entity": "user"
},
"mediaFolder": {
"type": "object",
"entity": "media_folder"
},
"propertyGroupOptions": {
"type": "array",
"entity": "property_group_option"
},
"mailTemplateMedia": {
"type": "array",
"entity": "mail_template_media"
},
"documentBaseConfigs": {
"type": "array",
"entity": "document_base_config"
},
"shippingMethods": {
"type": "array",
"entity": "shipping_method"
},
"paymentMethods": {
"type": "array",
"entity": "payment_method"
},
"productConfiguratorSettings": {
"type": "array",
"entity": "product_configurator_setting"
},
"orderLineItems": {
"type": "array",
"entity": "order_line_item"
},
"cmsBlocks": {
"type": "array",
"entity": "cms_block"
},
"cmsSections": {
"type": "array",
"entity": "cms_section"
},
"cmsPages": {
"type": "array",
"entity": "cms_page"
},
"documents": {
"type": "array",
"entity": "document"
}
}
},
但不清楚哪些字段至关重要。我是否需要先创建产品媒体文件夹,然后在向媒体端点发出 POST 请求时使用它的 ID?我可以只指定 URL,Shopware 会将图像本身下载到文件夹中还是继续指向我使用的 URL。我需要将图像存放在 Shopware 中。
我可以从 URL 下载图像并将它们推送到 Shopware,但我不知道如何使用它的 API(有很多图像,需要批量完成)。
【问题讨论】:
-
嘿,这个链接帮了我forum.shopware.com/discussion/comment/278603/#Comment_278603 FIRST: 创建一个新媒体 POST /api/{apiVersion}/media?_response=true SECOND: "Upload Image" /api/{apiVersion}/_action /media/{mediaId}/upload?extension={extension}&fileName={imgName}&_response=true 为我工作。
-
谢谢你,这会起作用,你应该把它作为答案发布!除此之外,上传的媒体还需要通过发布到
product_media端点来链接,其中包括产品ID、媒体ID 和可选的图像位置。然后可选地调用product端点,图像ID为coverId,将图像标记为封面。我个人最终通过管理面板上传图片 - 可以使用上传按钮一次上传多张图片。同样重要的是要知道 API 令牌仅持续 10 分钟。因此,对于大型上传,需要在批处理后刷新。 -
您必须将媒体添加到产品中,并且您必须设置编码器图像,这是正确的。您可以在下一次请求之前解析令牌并检查令牌是否仍然有效,如果不是,您只需再次运行身份验证并获取新令牌我的 C# 代码如下所示: if (JwtToken.ValidTo >= DateTime.Now .ToUniversalTime() - new TimeSpan(0, 5, 0)) { return Client.Get(request); } else { // 通过新的身份验证刷新令牌 IntegrationAuthenticator(this.key, this.secret); } return Client.Get(request);
标签: image api media shopware shopware6