Làm cách nào để phát trực tuyến nhạc trong ứng dụng của tôi từ liên kết Google Drive và làm cho liên kết có thể truy cập được?

Aug 16 2020

Trên một trang web, người dùng có thể tải nhạc lên. Bản nhạc này đang được tải lên tài khoản google drive của tôi. Sau đó, định dạng liên kết sau được ghi vào cơ sở dữ liệu:

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

Bây giờ khi bạn truy cập vào liên kết, nó sẽ thay đổi trong một cái gì đó như sau:

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

Liên kết dài là liên kết trong cơ sở dữ liệu được sử dụng cho ứng dụng để phát nhạc, nhưng tôi không có quyền mở nó ở đó nữa. Làm cách nào để tôi có thể truy cập liên kết dài và cuối cùng? Có cách nào để công khai liên kết dài này không?

Cảm ơn bạn!

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

Đây là tập lệnh ứng dụng 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);
}

------- BIÊN TẬP -------

Tôi đã thử giải pháp đã cho:

Thật đáng buồn là nó không hoạt động như mong đợi .. Tôi nhận được liên kết sau:

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

bây giờ khi tôi lấy id từ nó và chèn nó vào đây:

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

kết quả của nó là một liên kết thực sự dài, đó là liên kết tôi cần. Cái này vẫn không thể truy cập được nếu tôi ở chế độ trình duyệt riêng tư, nó buộc tôi phải đăng nhập mà tôi không muốn. Nó sẽ có thể truy cập được bằng liên kết như trong giải pháp của bạn. Đây là liên kết:

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

làm thế nào để làm cho liên kết này có thể truy cập được?

Có vẻ như liên kết này có các quyền bạn đã đặt http://docs.google.com/uc?export=open&id=your_file_id nhưng nếu bạn sao chép liên kết dài, liên kết này không cung cấp cài đặt quyền, nó vẫn chặn.

Trả lời

2 Viney Aug 16 2020 at 12:29

Sau khi tạo tệp, bạn cần cấp cho tệp một cấp độ truy cập thích hợp để xác định ai có thể truy cập tệp đó và cũng là cấp độ quyền xác định những gì họ có thể làm với tệp đó (đọc / ghi / xóa)

Đối với trường hợp sử dụng của bạn, nó phải được truy cập công khai bằng liên kết và chỉ đọc. Vì vậy, đây là cách bạn có thể làm trong tập lệnh ứng dụng

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