Фон
Я хочу записать студентов, а затем автоматически загрузить их записи на 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, созданного в браузере?
Как насчет этих изменений?
blob
на base64 и отправляет его в виде строковых данных.blob
и сохраните его как файл ogg с типом mimeType audio/ogg
.audio/ogg
. audio/ogg
в application/vnd.google-apps.audio
.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)
});
}
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.
}
}
{headers: {'Content-Type': 'application/x-www-form-urlencoded'}}
. Если это не требуется в вашей среде, удалите его.Извините, если я неправильно понимаю ваш вопрос.
application/vnd.google-apps.audio
вместоaudio/ogg
в качестве mimeType при создании файла?