Как сохранить изображение в моей базе данных mysql в формате blob на моем листе Google? - PullRequest
2 голосов
/ 05 августа 2020

У меня есть таблица Google, подключенная к моей базе данных MySQL с помощью скрипта Google. Я могу получить все нужные текстовые данные вместо большого двоичного объекта, хранящегося в базе данных. Вот код php:

$insert = $conn->query("INSERT into images (image) VALUES ('$base64Img')");

Я оставил только одно поле, чтобы было ясно

Столбец blob в таблице установлен на «LONGBLOB». Как я могу просмотреть свой BLOB как изображение в моем листе Google?

Вот что я пробовал:

function readFromTable() {
  var conn = Jdbc.getConnection(url, username, password);
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  var results = stmt.executeQuery('SELECT image FROM images');
  var numCols = results.getMetaData().getColumnCount();
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('Sheet1');
  var arr=[];
  while (results.next()) {
    var arr = [];
    for (var col = 0; col < numCols; col++) {
      arr.push(results.getBlob(col + 1));
    }
    sheet.appendRow(arr);
  }

  results.close();
  stmt.close();
}

Я не получаю сообщения об ошибке, но на моем листе оно печатается: JdbcBlob в ячейке вместо фактического изображения. Я хочу поместить изображение в ячейку своего листа Google

1 Ответ

2 голосов
/ 05 августа 2020
const jdbcBlob = results.getBlob(col + 1);
const appsScriptBlob = jdbcBlob.getAppsScriptBlob();
sheet.insertImage(appsScriptBlob,1,1);

//if  image data is base64 encoded:
sheet.insertImage(Utilities.newBlob(Utilities.base64Decode(appsScriptBlob.getDataAsString())),1,1)

Другой способ - получить массив байтов, используя getBytes():

const byteArr = results.getBytes(col + 1);
//if  image data is base64 encoded:
sheet.insertImage(Utilities.newBlob(Utilities.base64Decode(Utilities.newBlob(byteArr).getDataAsString())),1,1)
...