Конвертировать BLOB-объект .ogg в файл на диске Google

1

Фон

Я хочу записать студентов, а затем автоматически загрузить их записи на Google диск.

Текущее состояние дел

У меня есть код на стороне клиента, который может создавать blob, содержащий запись .ogg.

var blob = new Blob(chunks, { 'type' : 'audio/ogg; codecs=opus' });

Я могу отправить blob в автономный скрипт сценария приложений Google в запрос doPost(). В этом случае я использую аксиомы с обещанием.

axios.post("https://script.google.com/macros/s/SOME_ID/exec", blob)
  .then((response)=>{
   console.log(response)
  }).catch(error =>{
   console.log(error)
  })

Блаб приходит к автономному сценарию.

Сценарий автономных приложений Google

function doPost(e) {


  var params = JSON.stringify(e.parameters);
  createNewSoundFile(params)
  return ContentService.createTextOutput(params); 
}

function createNewSoundFile(blob){
  var title = 'Was created from a recording'
  var folderId = 'SOME_FOLDER_ID'
  var resource = {
    title: title,
    parents: [
      {
        "id": folderId, 
        "kind": "drive#fileLink"
      }
    ],
    mimeType: 'application/vnd.google-apps.audio', 
  };
  try{

  var newfile = Drive.Files.insert(resource, blob).id

  } catch(e){
   // Send error to Google sheet
   // Exception: The mediaData parameter only supports blob types for uploads.

  }
}

проблема

Вышеупомянутый код сценария приложений говорит, что blob не поддерживает тип носителя.

Вопрос

Как я могу создать новый .ogg файл на диске Google из .ogg blob, созданного в браузере?

  • 0
    Нужно ли использовать application/vnd.google-apps.audio вместо audio/ogg в качестве mimeType при создании файла?
  • 0
    Что такое текстовое сообщение об ошибке?
Показать ещё 3 комментария
Теги:
google-apps-script
google-drive-sdk
blob

1 ответ

2
Лучший ответ

Как насчет этих изменений?

Модификации:

сторона javascript:

  • Кодирует blob на base64 и отправляет его в виде строковых данных.

Сторона ГАЗ:

  • Расшифруйте base64 до blob и сохраните его как файл ogg с типом mimeType audio/ogg.
  • Сохраните файл как audio/ogg.
    • В моей среде он не смог преобразовать из audio/ogg в application/vnd.google-apps.audio.

Измененный скрипт: сторона javascript

От:

axios.post("https://script.google.com/macros/s/SOME_ID/exec", blob)
  .then((response)=>{
   console.log(response)
  }).catch(error =>{
   console.log(error)
  })

Для:

var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
  base64 = reader.result.replace(/^.*,/, "");
  let data = new URLSearchParams();
  data.append('data', base64);
  axios.post(
    "https://script.google.com/macros/s/SOME_ID/exec",
    data,
    {headers: {'Content-Type': 'application/x-www-form-urlencoded'}}
  ).then((response)=>{
    console.log(response)
  }).catch(error =>{
    console.log(error)
  });
}

Измененный скрипт: сторона GAS

Для:

function createNewSoundFile(base64){
  var data = Utilities.base64Decode(base64.parameters.data); // Added
  var blob = Utilities.newBlob(data); // Added

  var title = 'Was created from a recording'
  var folderId = 'SOME_FOLDER_ID'
  var resource = {
    title: title,
    parents: [
      {
        "id": folderId, 
//        "kind": "drive#fileLink" // I didn't know whether this is required.
      }
    ],
    mimeType: "audio/ogg", // Modified
  };
  try{

  var newfile = Drive.Files.insert(resource, blob).id

  } catch(e){
   // Send error to Google sheet
   // Exception: The mediaData parameter only supports blob types for uploads.

  }
}

Замечания:

  • В моей среде для скрипта javascript требуется {headers: {'Content-Type': 'application/x-www-form-urlencoded'}}. Если это не требуется в вашей среде, удалите его.

Извините, если я неправильно понимаю ваш вопрос.

  • 1
    Вы полностью прибили это. Мы месяцами пытались заставить это работать. Ваш код открывает для меня совершенно новый путь. Огромное спасибо.
  • 0
    @ Джейсон Оллсхорн Добро пожаловать. Я рад, что ваша проблема была решена. Также я мог бы учиться по вашему вопросу. И тебе спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню