<img>
一团一团的。
import React from 'react';
import { getImageBlob } from '../api/images';
class ImageViewer extends React.Component {
state = {
src: undefined,
loading: true,
}
componentDidMount() {
getImageBlob()
.then((imageBlob) => {
console.log(imageBlob);
const urlCreator = window.URL || window.webkitURL;
const imageUrl = urlCreator.createObjectURL(imageBlob);
console.log(imageUrl);
this.setState({ src: imageUrl, loading: false });
})
.catch((err) => {
console.error(err);
this.setState({ loading: false });
});
}
render() {
if (this.state.loading) {
return 'loading';
}
return <img src={this.state.src} height={100} width={100} />;
}
}
export default ImageViewer;
第一个的输出
console.log()
Blob(5842218)Â {size: 5842218, type: "application/json"}
我认为
type
也许这就是为什么它没有渲染,但我不确定。
第二个的输出
控制台.log()
有点像:
blob:http://localhost:3000/12bfba06-388d-48e2-8281-5ada40a662de
这个
getImageBlob()
功能是:
export const getImageBlob = () => new Promise((res, rej) => {
client
.get(`${IMAGES}`, {
responseType: 'blob',
})
.then((resp) => {
res(resp.data);
})
.catch((err) => {
rej(Error(err.message));
});
});
用服务器代码更新
这是发送回图像blob的代码。
const getImage = (imageKey) => {
const params = {
Bucket: process.env.S3_BUCKET,
Key: imageKey,
};
return new Promise((res, rej) => {
s3.getObject(params, (err, data) => {
if (err) {
rej(Error(err.message));
} else {
console.log(data);
res(data);
}
});
});
};
输出
控制台.log()
在服务器端:
{ AcceptRanges: 'bytes',
LastModified: 2018-08-18T18:07:39.000Z,
ContentLength: 2101981,
ETag: '"be594978d48fdc5964eb97ffb2c589f1"',
ContentEncoding: 'blob',
ContentType: 'image/jpg',
Metadata: {},
Body:
<Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 27 10 00 00 27 10 08 06 00 00 00 ba 4e 62 27 00 00 20 00 49 44 41 54 78 5e ec d0 01 0d 00 30 08 ... > }