简体   繁体   English

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

[英]How to get string base64 in a variable?

This is my code: but not get the string base64 in my variable. 这是我的代码:但没有在我的变量中获取字符串base64。 I need the string base64 in this variable var base64. 我在此变量var base64中需要字符串base64。 I have seen other issues but none of them meets what I need 我看过其他问题,但没有一个满足我的需求

<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>

the function that I have already complies with obtaining the base64 string of the file that is given as a parameter, what I can not do is get access to that string to assign it to a variable and use it. 我已经符合获取作为参数给出的文件的base64字符串的函数,我不能做的就是访问该字符串以将其分配给变量并使用它。
I just need you to tell me how I can get access to that base64 chain, I just need it in a variable that can be handled as desired. 我只需要您告诉我如何访问该base64链,我只需要一个可以根据需要处理的变量即可。

 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

Since Promise makes the function asynchronous, the following code would start running getBase64() and continuously executing console.log(base64) which is not defined yet. 由于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
}

So you should await for getBase64() be done or use a callback like the followings. 因此,您应该await getBase64()完成或使用如下所示的回调。

await example 1 等待示例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"> 

await example 2 等待示例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"> 


callback 打回来

 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"> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM