Como transmitir música em meu aplicativo a partir do link do Google Drive e tornar o link acessível?
Em um site, os usuários podem fazer upload de músicas. Esta música está sendo carregada na minha conta do Google Drive. Depois disso, o seguinte formato de link é gravado no banco de dados:
https://drive.google.com/uc?id=ID_GOES_HERE
Agora, quando você acessa o link, ele muda mais ou menos assim:
https://doc-14-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/fnjf7ftnl18svtcblses77hapi91jpe5/1597565925000/10139445714759083419/10139445714759083419/1mLu_myEgts9eaoWv6S9nxu8n4qfZM0Rr?authuser=0
O link longo é o link no banco de dados que é usado para o aplicativo tocar a música, mas não tenho mais permissão para abri-lo lá. Como posso tornar o último e longo link acessível? Existe alguma maneira de tornar este link longo público?
Obrigado!
<form id="form">
<input name="file" id="uploadfile" type="file">
<input name="filename" id="filename" type="text">
<input id="submit" type="submit">
</form>
<script>
const form = document.getElementById('form');
form.addEventListener('submit', e => {
e.preventDefault();
const file = form.file.files[0];
const fr = new FileReader();
fr.readAsArrayBuffer(file);
fr.onload = f => {
const url = "https://script.google.com/macros/s/###/exec"; // <--- Please set the URL of Web Apps.
const qs = new URLSearchParams({filename: form.filename.value || file.name, mimeType: file.type});
fetch(`${url}?${qs}`, {method: "POST", body: JSON.stringify([...new Int8Array(f.target.result)])})
.then(res => res.json())
.then(e => console.log("https://drive.google.com/uc? export=download&id=" + e.fileId))
.catch(err => console.log(err));
}
});
</script>
Este é o script do google app
function doPost(e) {
const folderId = "root"; // Folder ID which is used for putting the file, if you need.
const blob = Utilities.newBlob(JSON.parse(e.postData.contents), e.parameter.mimeType, e.parameter.filename);
const file = DriveApp.getFolderById(folderId || "root").createFile(blob);
const responseObj = {filename: file.getName(), fileId: file.getId(), fileUrl: file.getUrl()};
return ContentService.createTextOutput(JSON.stringify(responseObj )).setMimeType(ContentService.MimeType.JSON);
}
------- EDITAR -------
Tentei a solução dada:
infelizmente, não funciona como esperado .. Estou recebendo o seguinte link:
https://drive.google.com/uc?export=download&id=1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso
agora, quando eu pego o id dele e o insiro aqui:
http://docs.google.com/uc?export=open&id=your_file_id
o resultado disso é um link muito longo que é o link que eu preciso. Este ainda não está acessível se eu estiver no modo de navegador privado, por exemplo, ele me força a fazer o login que eu não quero. Deve estar acessível com link como na sua solução. Este é o link:
https://doc-08-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/cgag5dus6c18p9hc1hv0362urudm2g6t/1597730475000/10139445714759083419/10139445714759083419/1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso?e=open&authuser=0
como tornar este link acessível?
Parece que este link tem as permissões que você definiu http://docs.google.com/uc?export=open&id=your_file_id mas se você copiar o link longo, este não fornece as configurações de permissão, ele ainda bloqueia.
Respostas
Depois de criar seu arquivo, você precisa dar a ele um nível de acesso adequado que determina quem pode acessá-lo e também um nível de permissão que determina o que eles podem fazer com aquele arquivo (leitura / gravação / exclusão)
Para seu caso de uso, ele deve estar acessível publicamente com um link e somente leitura. Então é assim que você pode fazer no script do aplicativo
const file = DriveApp.getFolderById(folderId || "root").createFile(blob);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // <-- add this