Home > Software engineering >  How to prevent the[' '] when I split the dataURI
How to prevent the[' '] when I split the dataURI

Time:07-20

I'm trying to decode the dataURI to Image. I use split() to cut the "data:image/png;base64,",but it will let my variable cannot be decoded

function Image_Build() {
  var data_sheet = SpreadsheetApp.openById('10DY3Qlw6EwC_NnxSxoU-0H88PYKv83rOaRImn4yubDc').getSheetByName('表單回應 1');
  var data_col = data_sheet.getLastColumn();
  var data_row = data_sheet.getLastRow();
  var range = data_sheet.getRange(1,1,data_row,data_col);
  var values = range.getValues();
  var datauri = values[1][16];

  console.log(datauri);

  datauri = datauri.split("data:image/png;base64,")

  console.log(datauri);

  datauri = Utilities.newBlob(datauri);

  dataurl = Utilities.base64Decode(dataurl);

  var folder = DriveApp.getFolderById("1yECMj1EvBQhV1gigslYJu5KM3bxsK9yy");

  var img;

  folder.createFile("test", datauri, 'image/png');
  

}

.

Is anyone know how to do?enter image description here

CodePudding user response:

The reason for the message is that split() returns an array with multiple strings using the delimiter that you defined, so after datauri = datauri.split("data:image/png;base64,"), the result is an array like this:

['', '<yourbase64string>']

So when trying to create the Blob you have to use datauri[1]. Also, after that you mistyped datauri as dataurl when trying to use base64Decode, which you also need to fix. And also remember to use base64Decode before creating the blob, not after.

Even after fixing that I had some issues while testing to convert a dataURI. It turns out that createFile(name, content, mimeType), is supposed to take a string as content, not a blob. Instead you have to use createFile(blob).

The difference is just the number of parameters that you need to use, but that also means that you'll have to specify the mimeType and filename when using newBlob(). Here's a sample I built based on your current code that was able to successfully convert a dataURI string:

function Image_Build() {
  var data_sheet = SpreadsheetApp.openById('10DY3Qlw6EwC_NnxSxoU-0H88PYKv83rOaRImn4yubDc').getSheetByName('表單回應 1');
  var data_col = data_sheet.getLastColumn();
  var data_row = data_sheet.getLastRow();
  var range = data_sheet.getRange(1,1,data_row,data_col);
  var values = range.getValues();
  var datauri = values[1][16];

  datauri = datauri.split("data:image/png;base64,")
   
  datauri = Utilities.base64Decode(datauri[1]); //use datauri[1] because [0] is a blank string
  
  datauri = Utilities.newBlob(datauri, 'image/png', 'test.png'); //define the name and mymetype when creating the blob

  var folder = DriveApp.getFolderById("1yECMj1EvBQhV1gigslYJu5KM3bxsK9yy");

  folder.createFile(datauri);
}
  • Related