C# 无法将流作为参数传递给aspnet.core.NodeServices中的JS
我目前正在将一个“旧”的ASP MVC项目迁移到新的核心MVC(1.1),从一个突破性的更改过渡到下一个。由于System.Web.Helpers.WebImage已被删除,我现在仍停留在“图像处理”主题上。我查看了几种可能的解决方案,并喜欢通过中所述的Microsoft.AspNetCore.NodeServices提出的方法 当使用示例脚本并传入文件名时,这一切都很好。我现在已经花了几个小时来尝试通过一个字节流来完成这项工作,因为我从DB读取图像数据,并希望直接通过管道将其传输到JS JS使用JIMP库:C# 无法将流作为参数传递给aspnet.core.NodeServices中的JS,c#,node.js,asp.net-mvc,image-processing,asp.net-core,C#,Node.js,Asp.net Mvc,Image Processing,Asp.net Core,我目前正在将一个“旧”的ASP MVC项目迁移到新的核心MVC(1.1),从一个突破性的更改过渡到下一个。由于System.Web.Helpers.WebImage已被删除,我现在仍停留在“图像处理”主题上。我查看了几种可能的解决方案,并喜欢通过中所述的Microsoft.AspNetCore.NodeServices提出的方法 当使用示例脚本并传入文件名时,这一切都很好。我现在已经花了几个小时来尝试通过一个字节流来完成这项工作,因为我从DB读取图像数据,并希望直接通过管道将其传输到JS JS使
var jimp = require("jimp");
module.exports = function (result, source, mimeType, maxWidth, maxHeight) {
// Invoke the 'jimp' NPM module, and have it pipe the resulting image data back to .NET
jimp.read(source.buffer).then(function (file) {
var width = maxWidth || jimp.AUTO;
var height = maxHeight || jimp.AUTO;
file.resize(maxWidth, height)
.getBuffer(mimeType, function (err, buffer) {
var stream = result.stream;
stream.write(buffer);
stream.end();
});
}).catch(function (err) {
console.error(err);
});
};
“我的图像控制器”上的操作
var imageStream = await _nodeServices.InvokeAsync<Stream>(
"Node/resizeImageBuffer",
bild.BildDaten.Daten, // byte[]
bild.Mimetype, // "image/jpeg"
targetsize, // e.g. 400
targetsize);
我所得到的是,从节点到C#的结果流是有效的System.IO.stream对象,但它不能作为输出参数使用。。。
也许有人有主意 我最后做的是使用
System.BitConverter.ToString()
将图像字节[]转换为其十六进制字符串表示形式,并将其传递给节点脚本
var byteString = System.BitConverter.ToString(image.Bytes);
var img = await _nodeServices.InvokeAsync<Stream>(
"./NodeServices/thumbnail",
"image/jpeg",
byteString,
width,
height
);
我希望找到一种方法,将byte[]数组本身传递给节点脚本,但现在我很高兴这能起作用
JsonSerializationException: Error getting value from 'ReadTimeout' on 'System.IO.FileStream'.
var byteString = System.BitConverter.ToString(image.Bytes);
var img = await _nodeServices.InvokeAsync<Stream>(
"./NodeServices/thumbnail",
"image/jpeg",
byteString,
width,
height
);
const jimp = require('jimp')
module.exports = function (result, mimeType, bytes, maxWidth, maxHeight) {
const parsedBytes = bytes.split('-').map(e => parseInt(`0x${e}`))
const buffer = Buffer.from(parsedBytes)
jimp.read(buffer)
.then((img) => {
var width = maxWidth || jimp.AUTO
var height = maxHeight || jimp.AUTO
img.resize(width, height)
.getBuffer(mimeType, function (err, buffer) {
const stream = result.stream
stream.write(buffer)
stream.end()
})
})
.catch(err => {
console.error(err)
})
}