vba - 通过 Shopware 6 API / VBA 通过 URL 添加图像
问题描述
我尝试使用 Shopware 6 API 使用 VBA 和WinHttp.WinHttpRequest.5.1
. 除媒体传输外,一切正常。
我的做法:
- 在正确的媒体文件夹中的商店软件中创建媒体对象
POST /api/v3/media
payload: "{""mediaFolderId"":""" & folderID & """,""id"":""ec90cae2cc84c37b6b7a0cb9fe5c4548""}"
工作正常!
- 通过 url 上传新图片 (testfile.png)
POST /api/v3/_action/media/ec90cae2cc84c37b6b7a0cb9fe5c4548/upload?extension=png&fileName=testfile
payload: "{""url"":"" & MediaUrl & "." & MediaUrlExt & ""}"
response 204 (no error),
创建了一个媒体文件,但文件的内容不是 PNG 图像,而是有效负载字符串。
VBA代码:
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
AuthURL = url & "/api/v2/_action/media/" & newMediaID & "/upload?extension=" & FileExtFromUrl(MediaUrl) & "&fileName=" & FileNameFromUrl(MediaUrl) & "&_response=true"
objHTTP.Open "POST", AuthURL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/json"
objHTTP.setRequestHeader "Accept", "application/json"
objHTTP.setRequestHeader "Authorization", "Bearer " & Token
Debug.Print AuthURL
payload = "{""url"":""https://" & FTPUrl & ftpKategorieOrdner & "/" & MediaUrl & """}"
Debug.Print payload
objHTTP.send (payload)
strResult = objHTTP.responseText
Debug.Print strResult
Debug.Print "uploadMedia " & objHTTP.Status; " - " + objHTTP.StatusText
也许创建缩略图是问题?开发日志:
[2021-05-18 15:13:22] messenger.INFO: Sending message Shopware\Core\Content\Media\Message\GenerateThumbnailsMessage with Enqueue\MessengerAdapter\QueueInteropTransport {"message":"[object] (Shopware\\Core\\Content\\Media\\Message\\GenerateThumbnailsMessage: {})","class":"Shopware\\Core\\Content\\Media\\Message\\GenerateThumbnailsMessage","sender":"Enqueue\\MessengerAdapter\\QueueInteropTransport"} []
[2021-05-18 15:13:23] php.INFO: User Deprecated: The "Symfony\Component\Debug\DebugClassLoader" class is deprecated since Symfony 4.4, use "Symfony\Component\ErrorHandler\DebugClassLoader" instead. {"exception":"[object] (ErrorException(code: 0): User Deprecated: The \"Symfony\\Component\\Debug\\DebugClassLoader\" class is deprecated since Symfony 4.4, use \"Symfony\\Component\\ErrorHandler\\DebugClassLoader\" instead. at ./vendor/symfony/debug/DebugClassLoader.php:16)"} []
怎么了?
解决方案
这应该可行 - 管理面板使用相同的端点通过 URL 上传图像和上传二进制数据。
我能发现的唯一区别是请求的内容类型。
不幸的是,您没有提及您正在设置的内容类型,我认为这就是问题所在。
仅当内容类型为application/json
时,才会从 URL 中获取文件。
确保在第二个请求中设置标头
Content-Type: application/json
编辑根据https://forum.shopware.com/t/bilder-upload-ueber-api-url/87850/4中的 x-post发现 VBA 发送
content-type: "application/json; Charset=UTF-8"
所以 Shopware 核心的一个可能的补丁是
124: if (strpos($contentType,'application/json') !== false))
推荐阅读
- python - Python replace() 函数不起作用 - 尽管在一个新函数中
- wordpress - 在 WordPress 中垂直对齐图标
- javascript - Firestore 通过 Promise 获取子集合数据
- java - 使用 Retrofit 和 Glide 下载图像
- php - 如何通过父组件创建动态公共属性和数据到 livewire / laravel 中的子组件?
- c# - 如何强制 Random 的所有实例在不同的运行中生成相同的数字序列?
- android - 最小化应用程序时颤动Android应用程序图标
- php - 如何将 WordPress 循环数据发送到 jQuery?
- python - 你好,试图让这个程序不断循环,直到他们从第一个菜单中输入一个有效的选择
- angular - 有没有人有使用 SSR 在 Angular Unversal 中使用 Swiper.js 的经验?