我有以下设置,通过该设置,我从其 url 发送图像,进行编辑并发送回上传到 S3。我当前遇到的问题是 S3 上的图像已损坏,我想知道我的代码中是否存在问题导致了该问题。
服务器端:
function convertImage(inputStream) {
return gm(inputStream)
.contrast(-2)
.stream();
}
app.get('/resize/:imgDetails', (req, res, next) => {
let params = req.params.imgDetails.split('&');
let fileName = params[0]; console.log(fileName);
let tileType = params[1]; console.log(tileType);
res.set('Content-Type', 'image/jpeg');
let url = `https://${process.env.Bucket}.s3.amazonaws.com/images/${tileType}/${fileName}`;
convertImage(request.get(url)).pipe(res);
})
客户端:
axios.get('/resize/' + fileName + '&' + tileType)
.then(res => {
/** PUT FILE ON AWS **/
var img = res;
axios.post("/sign_s3_sized", {
fileName : fileName,
tileType : tileType,
ContentType : 'image/jpeg'
})
.then(response => {
var returnData = response.data.data.returnData;
var signedRequest = returnData.signedRequest;
var url = returnData.url;
this.setState({url: url})
// Put the fileType in the headers for the upload
var options = {
headers: {
'Content-Type': 'image/jpeg'
}
};
axios.put(signedRequest,img, options)
.then(result => {
this.setState({success: true});
}).bind(this)
.catch(error => {
console.log("ERROR: " + JSON.stringify(error));
})
})
.catch(error => {
console.log(JSON.stringify(error));
})
})
.catch(error => console.log(error))
在继续之前,我现在可以向您保证,通过此设置上传任何图像减去 convertImage()
都可以,否则图像放在 S3 上时会损坏。
关于图像损坏背后的问题有什么指示吗? 难道我对这里的流的理解还不够吗?如果是这样,我应该改变什么?
谢谢!
编辑1:
我尝试根本不通过graphicsmagick API 运行图像(request.get(url).pipe(res);
),但图像仍然损坏。
编辑2:
我最后放弃了,只是将文件从 Node.js 直接上传到 S3;无论如何,事实证明这是更好的做法。
最佳答案
因此,如果您的最终目标是使用 Node Js 将图像上传到 S3 存储桶中,则可以通过使用 multer-s3 来实现简单的方法。 Node 模块。
关于javascript - 如何将图像从 Node.js 发送到 React.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57868817/