Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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
Javascript 如何在客户端从JSON响应解码Base64文件?_Javascript_Node.js_Json_Express_Base64 - Fatal编程技术网

Javascript 如何在客户端从JSON响应解码Base64文件?

Javascript 如何在客户端从JSON响应解码Base64文件?,javascript,node.js,json,express,base64,Javascript,Node.js,Json,Express,Base64,我有一个在服务器端呈现文件的应用程序。我将它作为“base64”字符串通过json传递。我需要在客户端解码和下载一个文件。 我以简化的形式给出了代码,留下了与问题相关的内容 以下是express服务器上的路由: let xlsx = require('node-xlsx').default; const express = require('express'); const router = express.Router(); router.get('/', (req, res) =>

我有一个在服务器端呈现文件的应用程序。我将它作为“base64”字符串通过json传递。我需要在客户端解码和下载一个文件。 我以简化的形式给出了代码,留下了与问题相关的内容

以下是express服务器上的路由:

let xlsx = require('node-xlsx').default;
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  const data = [[1, 2, 3], ['a', 'b', 'c']];
  var buffer = xlsx.build([{ name: "mySheetName", data: data }])
    .toString('base64');
  res.json(buffer);
});

module.exports = router;
客户端上的React组件:

import React, { useEffect } from 'react';
import axios from 'axios';

const First = () => {
  useEffect(() => {
    axios({
      url: 'http://localhost:5000/excel',
      method: 'GET',
      responseType: 'blob',
    }).then(res => {
      const url = window.URL.createObjectURL(new Blob([res.data]));
      const link = document.createElement('a');
      link.href = url;
      link.setAttribute('download', 'data.xlsx');
      document.body.appendChild(link);
      link.click();
    });
  }, []);
  return (
    <div>
      <h3>First page</h3>
      <hr className="gold" />
    </div>
  );
};

export default First;
import React,{useffect}来自“React”;
从“axios”导入axios;
常数优先=()=>{
useffect(()=>{
axios({
网址:'http://localhost:5000/excel',
方法:“GET”,
responseType:'blob',
})。然后(res=>{
constURL=window.url.createObjectURL(新Blob([res.data]);
const link=document.createElement('a');
link.href=url;
link.setAttribute('download','data.xlsx');
document.body.appendChild(链接);
link.click();
});
}, []);
返回(
首页

); }; 首先导出默认值;
问候。

使用
atob

请参阅快速示例

let myData=“YQ=”

console.log(atob(myData));//这有助于我解码和下载xlsx文件:

import React, { useEffect } from 'react';
import axios from 'axios';
import download from 'downloadjs';

const First = () => {
  useEffect(() => {
    axios.get('http://localhost:5000/excel')
      .then(res => {
        download(atob(res.data), 'data.xlsx', { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
      });
  }, []);
  return (
    <div>
      <h3>First page</h3>
      <hr className="gold" />
    </div>
  );
};

export default First;
import React,{useffect}来自“React”;
从“axios”导入axios;
从“downloadjs”导入下载;
常数优先=()=>{
useffect(()=>{
axios.get()http://localhost:5000/excel')
。然后(res=>{
下载(atob(res.data),'data.xlsx',{type:“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”});
});
}, []);
返回(
首页

); }; 首先导出默认值;

我使用了

如果输出是一个字节,它将产生奇怪的输出。