Dha*_*osh 11 javascript sapb1 node.js
我正在从 SAP B1 服务层获取图像。在邮递员中,我可以将其视为image/png,但显示时出现问题。
显示它的正确方法是什么<img />?
require(fetchedImage) - 不起作用
我创建了一个云函数来获取图像并将其传递给客户端,但我不知道该怎么做。
有一个像这样的超级奇怪的物体
data:
> '?PNGörönöu001aönöu0000öu0000öu0000örIHDRöu0000öu.........
Run Code Online (Sandbox Code Playgroud)
不知道如何通过它传递它,res.send(IMAGE IN PNG)所以我可以看到在客户端获取图像。
检查base64转换,但我不知道如何使用它们。
邮递员请求:(这工作正常)
获取:https : //su05.consensusintl.net/b1s/v1/ItemImages ('test')/$value
标题:SessionId:尝试时问我
由于某些原因,我们不能在 Front-End 中直接获取 Image,需要创建一个中间件,所以我们在 Firebase Cloud Function
所以这里是获取图像但不知道如何传递它的函数。
这是 Firebase Cloud Function 中的函数:
if (!req.body.productId) {
res.status(400).send({ error: "productId is required" });
return;
}
console.log("Starting the process");
const productId = req.body.productId;
const login = await Auth.login();
const fetchedImg = await ItemMaster.getImage(login["SessionId"], productId);
//Here in the fetchedImg, we're getting some data like
res
.status(200)
.set("Content-Type", "image/png")
.send(fetchedImg);
Run Code Online (Sandbox Code Playgroud)
我们得到这样的回应:
{ 状态:200,
statusText: '好的',
标题:
Run Code Online (Sandbox Code Playgroud){ server: 'nginx', date: 'Wed, 22 Jan 2020 03:52:22 GMT', 'content-type': 'image/png', 'transfer-encoding': 'chunked', connection: 'close', dataserviceversion: '3.0', 'content-disposition': 'inline; filename="rr-96600.png"', vary: 'Accept-Encoding', 'set-cookie': [ 'ROUTEID=.node2; path=/b1s' ] },配置:
Run Code Online (Sandbox Code Playgroud){ url:数据:
'?PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000?\u0000\u0000\u0000?\b\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0019tEXtSoftware\u0000Adobe ImageReadyq?e<\u0000\u0000\u0003hiTXtXML:com.adobe.xmp\u0000\u0000\u0000\u0000\u0000
这是超长的,还有 80-100 行
如果要测试,可以使用以下方法:
邮差:
POST:https : //us-central1-rapid-replacement.cloudfunctions.net/getImageFromItems
正文:{"productId":"test"}
有效的 productId 是: 1. "RR000102" 2. "test" 3. "RR000101"
这是我最接近的工作解决方案。基本上我尝试的是获取图像,然后将其转换为客户端上的 blob,以便您可以将其转换为 .UpdatedobjectURL代码将图像作为缓冲区流式传输并在客户端上使用它,然后将其转换为 objectURL 并分配给图像源代码
服务器代码:
const http = require('http')
const axios = require('axios')
const fs = require('fs')
const stream = require('stream')
const server = http.createServer(function(req, res) {
if (req.url === '/') {
res.setHeader("Access-Control-Allow-Origin", "*");
axios.post(
"https://su05.consensusintl.net/b1s/v1/ItemImages('test')/$value", {
responseType: "blob"
}).then(function(resp) {
console.log(resp.data)
const buf_stream = new stream.PassThrough()
buf_stream.end(Buffer.from(resp.data))
buf_stream.pipe(res.end())
}).catch(err => console.log(err))
}
})
server.listen(3500)
Run Code Online (Sandbox Code Playgroud)
客户端代码:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<img style="width:200px; height:200px" />
<script>
const img = document.getElementsByTagName("IMG")
fetch('http://localhost:3500').then(function(response) {
console.log(response)
return response.body
}).then(function(data) {
console.log(data)
const reader = data.getReader()
return new ReadableStream({
start(controller) {
return pump();
function pump() {
return reader.read().then(({ done, value }) => {
// When no more data needs to be consumed, close the stream
if (done) {
controller.close();
return;
}
// Enqueue the next data chunk into our target stream
controller.enqueue(value);
return pump();
});
}
}
})
})
.then(stream => new Response(stream))
.then(response => response.blob())
.then(blob => URL.createObjectURL(blob))
.then(url => img[0].src = url)
.catch(err => console.error(err));
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |