相关疑难解决方法(0)

来自DataURL的Blob?

使用FileReader's readAsDataURL()我可以将任意数据转换为数据URL.有没有办法Blob使用内置的浏览器apis 将数据URL转换回实例?

javascript fileapi

73
推荐指数
7
解决办法
7万
查看次数

发送canvas.toDataURL()作为FormData

我正在尝试使用html2canvas将DOM元素呈现为.png图像,然后将其上传到服务器。这是我的代码:

import React, { Component, PropTypes } from 'react';
import html2canvas from 'html2canvas';
import axios from 'axios';


const sendScreenshot = (img) => {
  const config = {
      headers: {
          'content-type': 'multipart/form-data'
      }
  }
  let data = new FormData();
  data.append('screenshot', img);      
  return axios.post('/api/upload', data)
}

export default class Export extends Component {

  printDocument() {
    const input = document.getElementById('divToPrint');
    html2canvas(input).then(canvas => {
      document.body.appendChild(canvas);
      const imgData = canvas.toDataURL('image/png');
      sendScreenshot(imgData)
    });
  }

  ...
Run Code Online (Sandbox Code Playgroud)

我可以看到DOM元素已正确转换为图像,因为我可以看到它附加在页面上。

在node.js服务器端,我可以看到表单正在通过,但是“截屏”是作为文本字段而不是文件接收的。我正在使用multer,并且确认至少在使用Postman时,我可以正确接收和保存文件上传。

所以我想基本的问题是我需要指出我要附加到FormData的项是文件,而不是文本字段。但是我不知道该怎么做。我尝试使用带有三个参数的append,并尝试将imgData转换为如下所示的Blob:

const blob = new Blob([img], {type: 'image/png'});

但是结果并没有使我更接近我想要的。

javascript multipartform-data reactjs multer

4
推荐指数
1
解决办法
3666
查看次数