nodejsはmysqlでblobタイプの画像データを読み込みます

MysqlでBLOB型データを読み込む方法について

「最近プロジェクトに取り組むと、初心者はかなり多くの問題に遭遇します。いいえ、データベースに保存されているユーザー アバターに遭遇しました。それは BLOB フィールドでした。それをバックエンドから取り出してフロントエンドに渡しました。フロントエンドができないことがわかりました 表示には、それがバッファ型のオブジェクトであることが判明したため、src が見つかりません。次のステップは、このオブジェクトをテキストに変換する方法を見つけて、以前に保存したフィールドを完全に読み出すことができ、多くの結果が得られます。奇妙なことに、最初に次のコードを使用しました。

var buffer = new Buffer.from(Blob);
var basebuffer=buffer.toString('base64')

その結果、読み出した文字列が使えないことが分かり、再度連結を行いました。

res.send({
    
    
avatar:'data:image/png;base64,'+basebuffer
})

img の src 属性で読み込むbase64系画像のプレフィックスの問題かと思ったのですが、結局表示できずエラーも報告されませんでした!
考えた結果、mysql に戻ることにしました。blob 型データを読み込んで変換できる Convert (utf8 を使用したアバター) 関数があったことを思い出しました。しかし、それはまだ処理する必要があります。as フィールドが必要です。 js ではさまざまなスペースが含まれるこの種のフィールドを理解できないため、後から読みやすくするために ~
コードは次のとおりです。

 db.query('select convert(avatar using utf8) as newavatar from userinfo where username=?',result[0].username,function(err,result)
        {
    
    
            if(err)
            {
    
    
                return res.send({
    
    
                    status:1,
                    msg:"拿到图像错误!"
                })
            }
            baseavatar=result[0].newavatar
            console.log(baseavatar);
            res.send(JSON.stringify({
    
    
                status:0,
                msg:"登录成功!",
                token:'Bearer '+token,
                username:userinfo.username,
                avatar:baseavatar
            }))
        })

フロントエンド部分:

<img src="../public/username.png" alt="" srcset="" id="displayimg">
 mounted () {
    
    
    if (store.state.token !== '') {
    
    
      console.log('已经登录!'); this.token = store.state.token
      const headimg = document.getElementById('displayimg')
      headimg.src = store.state.avatar
    } else {
    
     console.log('未登录!') }
    if (store.state.username !== '') {
    
     console.log(store.state.username) }
  }
  //login部分
    login () {
    
    
      fetch('http://127.0.0.1:3006/api/login', {
    
    
        method: 'post',
        headers: {
    
    
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
    
    
          username: this.username,
          password: this.password
        })
      }).then(res => res.json())
        .then(res => {
    
    
          alert(res.msg)
          store.commit('settoken', res.token)
          store.commit('setusername', res.username)
          store.commit('setavatar', res.avatar)
          if (res.status === 0) {
    
     this.$router.push('/self') }  //回溯路由

私はここで成功しました。皆さんのお役に立てれば幸いです。

おすすめ

転載: blog.csdn.net/weixin_51295863/article/details/128776960
おすすめ