如何下载图像并在javascript中转换为base64?

时间:2019-02-18 23:08:24

标签: javascript

我可以不下载图像而将其发布到另一个页面吗? (转换为base64并发布)

function run(){
  const url = 'http://g1.gangsters.pl/php/ks_sa_100.php?co=61';
  const body = new FormData()
  body.append('blokada', true)
  body.append('y', Math.floor(Math.random() * (100 - 100 + 1)) + 100)

  fetch(url, { method: 'POST', body })
}

setInterval(() => {
  console.log('Robbing....')
  run()
}, 1700)

如何添加一些内容来下载此图像,http://g1.gangsters.pl/php/sec_token.php?type=sa a然后将其转换为base64字符串?

1 个答案:

答案 0 :(得分:1)

如果您的问题正确无误

  • 首先将图像添加到base64中,
  • 随后在POST请求的body中发送base64

您可以首先(使用Promise)等待FileReader读取imageData。 .then将base64传递给您的下一个(post)函数:

const toDataURL = (url) => fetch(url)
  .then(res => res.blob())
  .then(blob => new Promise((res, err) => {
    const FR = new FileReader();
    FR.onloadend = () => res(FR.result);
    FR.readAsDataURL(blob);
    FR.onerror = err;
  }));

const toSecToken = toDataURL('http://g1.gangsters.pl/php/sec_token.php?type=sa')
  .then(base64 => {
    const body = new FormData();
    body.append('base64', base64);
    body.append('blokada', true);
    body.append('y', Math.floor(Math.random() * (100 - 100 + 1)) + 100);
    return fetch('http://g1.gangsters.pl/php/ks_sa_100.php?co=61', { method:'POST', body });
  });

toSecToken.then(res => {
    console.log(res);
});

正如其他人所指出的,这应该在服务器端更好地处理。来回发送图像(+自base64编码以来增加的权重的1/4-以及允许CORS的服务器...)似乎是不必要的开销。
因此,sec_token.php可以扩展为将图像转发到ks_sa_100.php(+必要的查询参数,例如co=61或所需的任何东西)

# ks_sa_100.php?co=61

$img = file_get_contents('http://g1.gangsters.pl/php/sec_token.php?type=sa');  
$base64 = base64_encode($img); // if you really need that base64 data string

资源:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises
https://developer.mozilla.org/en-US/docs/Web/API/FileReader
https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch