Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs将blob(base64)作为映像服务_Node.js - Fatal编程技术网

Node.js nodejs将blob(base64)作为映像服务

Node.js nodejs将blob(base64)作为映像服务,node.js,Node.js,我知道还有两个类似的问题,但我的问题就是不起作用,我也不知道为什么 我正在尝试在nodejs服务器上提供保存在base64中的blob映像 它只是不上菜,我不知道为什么。如果我注释掉“writeHead”部分,它将显示base64。我试过使用数据:image/jpeg和不使用。我还尝试将其转换为缓冲区。我就是想不通 base64映像小于200 kb,并保存在mediumblob中 有人能看出我做错了什么吗 app.get("/f/:id", async function(re

我知道还有两个类似的问题,但我的问题就是不起作用,我也不知道为什么

我正在尝试在nodejs服务器上提供保存在base64中的blob映像

它只是不上菜,我不知道为什么。如果我注释掉“writeHead”部分,它将显示base64。我试过使用
数据:image/jpeg
和不使用。我还尝试将其转换为缓冲区。我就是想不通

base64映像小于200 kb,并保存在mediumblob中

有人能看出我做错了什么吗

app.get("/f/:id", async function(req, res) {
  r = await Files.get(req);
  if(r.err.code){
    console.log("error",r);
  }
  var file = r.res.file;

  res.writeHead(200, {
    'Content-Type': 'image/png',
    'Content-Length': file.length
  });
  res.end(file);
});
下面是它在浏览器中的外观 下面是未启用writeHead时的情况

注意:底部的“viewPortSize”id元素是一个扩展

编辑#1:在Firefox上还显示“由于错误,图像无法显示” 这一定意味着我把它编错了base64,对吧

编辑#3:实际上它被正确地保存了,因为如果我删除标题并将其显示为带有img和src的html,它会正确地显示图像。现在我真的不知道问题出在哪里了

编辑#2:下面是app.js的设置

// ==============================================
// Base setup
// ==============================================

process.env.TZ = "Etc/GMT"

const express     = require('express');
const session     = require('express-session');
const app         = express();
const port        = 3075;
const bodyParser  = require('body-parser');

app.use(bodyParser.urlencoded({limit: '50mb', extended: true }));
app.use(bodyParser.json({limit: '50mb'}));

app.use(require('express-useragent').express());
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}))

// Cors
app.use(async function(req, res, next) {

  let allowOrigins = [
    // removed for SO
  ];

  if(Config.Env === Environments.Local){
    res.header("Access-Control-Allow-Origin", "*");
    req.session.language = req.query.lg;
  }else{
    res.header("Access-Control-Allow-Origin", Config.FrontEnd.Url);
    var origin = req.get('origin');
    for (let i = 0; i < allowOrigins.length; i++) {
      const allowOrigin = allowOrigins[i];
      if(origin.match(allowOrigin)){
        res.header("Access-Control-Allow-Origin", origin);
      }
    }

    var subdomain = origin.split('.')[0];
    for (let j = 0; j < availableLanguages.length; j++) {
      const lang = availableLanguages[j];
      if(lang.code === subdomain){
        req.session.language = lang.code;
        break;
      }    
    }
  }

  // if(Config.Env !== Environments.Local){
    if(req.session.language !== undefined && req.session.language !== "en"){
      Config.FrontEnd.Url = Config.FrontEnd.Url.replace("://", "://"+req.session.language+".");
    }
  // }


  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, auth-id, auth-token, x-csrf-token, _csrf");
  res.header('Access-Control-Allow-Methods', 'PATCH, POST, GET, DELETE, OPTIONS');
  next();
});
//==============================================
//基本设置
// ==============================================
process.env.TZ=“Etc/GMT”
const express=require('express');
const session=require('express-session');
常量app=express();
常数端口=3075;
const bodyParser=require('body-parser');
use(bodyParser.urlencoded({limit:'50mb',extended:true}));
use(bodyParser.json({limit:'50mb'}));
app.use(require('express-useragent').express());
应用程序使用(会话)({
秘密:“键盘猫”,
resave:false,
saveUninitialized:true,
cookie:{secure:true}
}))
//科尔斯
应用程序使用(异步函数(req、res、next){
设allowOrigins=[
//因此被免职
];
if(Config.Env==Environments.Local){
res.header(“访问控制允许原点”、“*”);
req.session.language=req.query.lg;
}否则{
res.header(“访问控制允许来源”,Config.FrontEnd.Url);
var origin=req.get('origin');
for(设i=0;i
编辑#4:如果我像这样发送它(上面有数据部分),图像会显示它应该显示的样子。但是,标题不是图像的标题。(如果我更改为图像,它将返回到黑屏)

app.get(“/f/:id”),异步函数(req,res){
r=等待文件。获取(req);
if(r.错误代码){
console.log(“错误”,r);
}
var file=r.res.file;
res.end(
''+
''+
''+
''+
''+
''
);
});

如果数据库存储
数据:image/png;base64,xxxx
字符串,则需要将其转换回二进制数据,以作为内容类型为
image/png
的响应的一部分(类似于常规图像文件)


如果第四次编辑有效,您似乎拥有了整个
数据:image/png;数据库中的base64,xxxx
字符串?要在
image/png
响应中使用它,请去掉
数据:image/png;base64,
并转换base64中的剩余图像数据。响应和长度应该来自该转换的结果。@Matt如果我从blob中删除“data:image/png;base64”,转换base64字符串后它仍然显示黑色屏幕
Buffer.from(base64string\u来自文件'base64')
非常感谢Matt。这立刻奏效了。我真的很感谢你解释为什么它不起作用。谢谢,谢谢!!
app.get("/f/:id", async function(req, res) {
  r = await Files.get(req);
  if(r.err.code){
    console.log("error",r);
  }
  var file = r.res.file;

  res.end(
    '<html>'+
      '<head></head>'+
      '<body>'+
          '<img src="'+file+'">'+
      '</body>'+
    '</html>'
  );
});
const img_base64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='

const server = require('http').createServer((req,res)=>{
  console.log('got req', req.url)

  // Extract image data
  const m = /^data:(.+?);base64,(.+)$/.exec(img_base64)
  if (!m) throw new Error(`Not a base64 image [${img_base64}]`)
  const [ _, content_type, file_base64 ] = m
  const file = Buffer.from(file_base64,'base64')

  res.writeHead(200, {
    'Content-Type': content_type,
    'Content-Length': file.length
  });
  res.end(file);
})

server.listen(3132, ()=> console.log('hi', server.address()))