如何在变量中获取字符串base64



这是我的代码:但不能在我的变量中获取字符串base64。我需要此变量var base64中的字符串base64。我已经看到了其他问题,但是它们都不符合我的需求

<input type:file multiple id="files">

 <script>
function listarchivos(){
    var base64; //in this variable i need the base64
    var selectedFile = document.getElementById("files").files;
           var fileToLoad = selectedFile[0];
     getBase64(fileToLoad).then(
                      data => alert(data)
                    );
               }
    //This is my function for get base64, but not return the string base64
    function getBase64(file) {
        return new Promise((resolve, reject) => {
            const reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = () => resolve(reader.result);
            reader.onerror = error => reject(error);
            return Promise.resolve(reader.result)
        });
    }
    </script>

我已经符合获取作为参数的文件的base64字符串的函数,我无法做的就是获取该字符串以将其分配给变量并使用它。
我只需要您告诉我如何访问该基本64链,我只需要根据需要处理的变量即可。

 I have already tried the following options
  var base64 = getBase64(fileToLoad).then(
                          data => alert(data)
                        ); //this not works
getBase64(fileToLoad).then(
                          data => base64 = data
                        ); //This not works
getBase64(fileToLoad).then(
                          data => return{data}
                        );//this not works

由于Promise使功能异步,因此以下代码将开始运行getBase64()并连续执行尚未定义的console.log(base64)

function listarchivos() {
  base64; //in this variable i need the base64
  var selectedFile = document.getElementById("files").files;
  var fileToLoad = selectedFile[0];
  getBase64(fileToLoad).then(
    data => {
      base64 = data;
    }
  );
  console.log(base64) // undefined
}

因此,您应该完成await的CC_4,或者使用以下的回调。

等待示例1

async function listarchivos() {
  var base64; //in this variable i need the base64
  var selectedFile = document.getElementById("files").files;
  var fileToLoad = selectedFile[0];
  await getBase64(fileToLoad).then(
    data => {
      alert(data);
      base64 = data;
    }
  );
  console.log(base64)
}
//This is my function for get base64, but not return the string base64
function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
    return Promise.resolve(reader.result)
  });
}
$('#files').on('change', listarchivos)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="files">

等待示例2

async function listarchivos() {
  var base64; //in this variable i need the base64
  var selectedFile = document.getElementById("files").files;
  var fileToLoad = selectedFile[0];
  base64 = await getBase64(fileToLoad).then(
    data => {
      return data;
    }
  );
  console.log(base64)
}
//This is my function for get base64, but not return the string base64
function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
    return Promise.resolve(reader.result)
  });
}
$('#files').on('change', listarchivos)
function DoSomething() {
  console.log(base64)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="files">


回调

var base64;
function listarchivos() {
  var selectedFile = document.getElementById("files").files;
  var fileToLoad = selectedFile[0];
  getBase64(fileToLoad).then(
    data => {
      base64 = data;
      DoSomething()
    }
  );
}
//This is my function for get base64, but not return the string base64
function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
    return Promise.resolve(reader.result)
  });
}
$('#files').on('change', listarchivos)
function DoSomething() {
  console.log(base64)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="files">

最新更新