Google 드라이브 링크에서 내 앱의 음악을 스트리밍하고 링크에 액세스 할 수 있도록하는 방법은 무엇입니까?

Aug 16 2020

웹 사이트에서 사용자는 음악을 업로드 할 수 있습니다. 이 음악은 내 Google 드라이브 계정에 업로드됩니다. 그 후 다음 링크 형식이 데이터베이스에 기록됩니다.

https://drive.google.com/uc?id=ID_GOES_HERE

이제 링크에 액세스하면 다음과 같이 변경됩니다.

https://doc-14-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/fnjf7ftnl18svtcblses77hapi91jpe5/1597565925000/10139445714759083419/10139445714759083419/1mLu_myEgts9eaoWv6S9nxu8n4qfZM0Rr?authuser=0

긴 링크는 앱에서 음악을 재생하는 데 사용되는 데이터베이스의 링크이지만 더 이상 열 수있는 권한이 없습니다. 마지막 링크와 긴 링크에 액세스하려면 어떻게해야합니까? 이 긴 링크를 공개하는 방법이 있습니까?

감사합니다!

    <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>

이것은 Google 앱 스크립트입니다.

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);
}

------- 편집하다 -------

주어진 해결책을 시도했습니다.

슬프게도 예상대로 작동하지 않습니다 .. 다음 링크를 받고 있습니다.

https://drive.google.com/uc?export=download&id=1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso 

이제 ID를 가져와 여기에 삽입하면

http://docs.google.com/uc?export=open&id=your_file_id 

그 결과는 내가 필요한 링크 인 정말 긴 링크입니다. 예를 들어 개인 브라우저 모드에있는 경우 여전히 액세스 할 수 없으며 원하지 않는 로그인을 강제합니다. 솔루션에서와 같이 링크로 액세스 할 수 있어야합니다. 이것은 링크입니다 :

https://doc-08-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/cgag5dus6c18p9hc1hv0362urudm2g6t/1597730475000/10139445714759083419/10139445714759083419/1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso?e=open&authuser=0 

이 링크에 액세스 할 수있게하는 방법은 무엇입니까?

이 링크에 설정 한 권한이있는 것 같습니다. http://docs.google.com/uc?export=open&id=your_file_id 그러나 긴 링크를 복사하면이 링크는 권한 설정을 제공하지 않지만 여전히 차단됩니다.

답변

2 Viney Aug 16 2020 at 12:29

파일을 만든 후에는 파일에 액세스 할 수있는 사람을 결정 하는 적절한 액세스 수준 과 해당 파일로 수행 할 수있는 작업 (읽기 / 쓰기 / 삭제)을 결정 하는 권한 수준 을 제공해야합니다.

유스 케이스의 경우 링크 및 읽기 전용으로 공개적으로 액세스 할 수 있어야합니다. 이것이 앱 스크립트에서 할 수있는 방법입니다.

const file = DriveApp.getFolderById(folderId ||  "root").createFile(blob);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // <-- add this