Невозможно отобразить изображение, извлеченное в виде вложения из couchdb на сервере и отправленное клиенту через socket.io - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь извлечь двоичные данные из couchdb и отправить их клиенту через socket.io.

Я использую нано (https://www.npmjs.com/package/nano). Я могу получить вложения и отправить его через socket.io клиенту. После преобразования двоичных данных в URL в URL всегда отображается пустое изображение.

const nano = require("nano")('http://username:password@my.couchDB.com');
const users = nano.db.use("users");
const io = require("socket.io")(8888);


io.on('connection', socket =>{
    socket.on('getProfile', async data => {
        try{
            let f = await users.get(data.name);
            let ob = Object.assign({}, f);
            delete ob._id;
            delete ob._rev;
            let attachment = await users.attachment.get(ob.image,ob.image);
            ob.imageData = attachment;
            socket.emit('profile', ob);
        }
        catch(err){
            socket.emit('err', err);
        }
    });
});


import React, { Component } from 'react';
import socketIOClient from "socket.io-client";
import Spinner from '../Spinner';

export default class test extends Component {
    constructor(props){
        super(props);
        this.state = {
            loading: true
        };
    }

    componentDidMount(){
        const socket = socketIOClient("http://10.20.30.40:8888");
        socket.emit('getProfile', {name: 'abc', email: 'abc@xyz.com'});
        socket.on('profile', (data) => {
            let d= [];
            d.push(data.imageData);
            let ImgName = data.image;
            let type = ImgName.split('.')[1];
            let imageURL = window.URL.createObjectURL(new Blob(d, {type: 'image/' + type}));
            this.setState({
                url: imageURL,
                loading: false
            });
        });
    }
    render() {
        if(this.state.loading){
            return (
                <Spinner/>
            );
        }
        else {
            return (
                <img src={this.state.url} alt="blah"/>
            );
        }
    }
}


Изображение не отображается. Все, что я получаю, это сломанное изображение вместе с альтернативным текстом. Помоги мне, ребята!

...