এই উত্তরটি গুগল / ফায়ারবেস ক্লাউড স্টোরেজে কোনও ফাইল আপলোড করার সময় ডাউনলোড URL পাওয়ার বিকল্পগুলির সংক্ষিপ্তসার করবে। ডাউনলোড URL টি তিন ধরণের রয়েছে:
- স্বাক্ষরিত ডাউনলোডের URL গুলি, যা অস্থায়ী এবং সুরক্ষা বৈশিষ্ট্যগুলি রয়েছে have
- টোকেন ডাউনলোড ইউআরএল, যা অবিরাম এবং সুরক্ষা বৈশিষ্ট্যগুলি রয়েছে
- সর্বজনীন ডাউনলোড ইউআরএল, যা অবিরাম এবং সুরক্ষার অভাব রয়েছে
টোকেন ডাউনলোড URL পাওয়ার জন্য তিনটি উপায় রয়েছে। অন্য দুটি ডাউনলোডের ইউআরএলগুলি এগুলি পাওয়ার কেবল একটি উপায় আছে।
ফায়ারবেস স্টোরেজ কনসোল থেকে
আপনি ফায়ারবেস স্টোরেজ কনসোল থেকে ডাউনলোড URL পেতে পারেন:
ডাউনলোড ইউআরএলটি দেখতে এমন দেখাচ্ছে:
https://firebasestorage.googleapis.com/v0/b/languagetwo-cd94d.appspot.com/o/Audio%2FEnglish%2FUnited_States-OED-0%2Fabout.mp3?alt=media&token=489c48b3-23fb-4270-bd85-0a328d2808e5
প্রথম অংশটি আপনার ফাইলের একটি মানক পথ। শেষে টোকেন হয়। এই ডাউনলোড URL টি স্থায়ী, অর্থাত্ এটির মেয়াদ শেষ হবে না, যদিও আপনি এটি প্রত্যাহার করতে পারেন।
getDownloadURL () ফ্রন্ট এন্ড থেকে
ডকুমেন্টেশন ব্যবহার আমাদের বলে getDownloadURL()
:
let url = await firebase.storage().ref('Audio/English/United_States-OED-' + i +'/' + $scope.word.word + ".mp3").getDownloadURL();
এটি একই ডাউনলোডের URL পেয়েছে যা আপনি আপনার ফায়ারবেস স্টোরেজ কনসোল থেকে পেতে পারেন। এই পদ্ধতিটি সহজ তবে আপনার অপ্রয়োজনীয় ডাটাবেস কাঠামোর জন্য আমার অ্যাপ্লিকেশনটিতে প্রায় 300 লাইন কোডের কোড যা আপনার ফাইলের পথটি জানতে হবে তা আপনার প্রয়োজন। আপনার ডাটাবেস জটিল হলে এটি একটি দুঃস্বপ্ন হতে পারে। এবং আপনি সামনের প্রান্ত থেকে ফাইলগুলি আপলোড করতে পারেন, তবে এটি আপনার অ্যাপ্লিকেশনটি ডাউনলোড করে এমন কোনও ব্যক্তির কাছে আপনার শংসাপত্রগুলি প্রকাশ করবে। সুতরাং বেশিরভাগ প্রকল্পের জন্য আপনি আপনার নোড ব্যাক এন্ড বা গুগল ক্লাউড ফাংশন থেকে আপনার ফাইলগুলি আপলোড করতে চান, তারপরে ডাউনলোড ইউআরএল পাবেন এবং আপনার ফাইল সম্পর্কিত অন্যান্য ডেটা সহ এটি আপনার ডেটাবেজে সংরক্ষণ করুন save
অস্থায়ী ডাউনলোড URL গুলির জন্য getSignUrl () পান
একটি নোড ব্যাক এন্ড বা গুগল ক্লাউড ফাংশন থেকে getSidedUrl () ব্যবহার করা সহজ:
function oedPromise() {
return new Promise(function(resolve, reject) {
http.get(oedAudioURL, function(response) {
response.pipe(file.createWriteStream(options))
.on('error', function(error) {
console.error(error);
reject(error);
})
.on('finish', function() {
file.getSignedUrl(config, function(err, url) {
if (err) {
console.error(err);
return;
} else {
resolve(url);
}
});
});
});
});
}
একটি স্বাক্ষরিত ডাউনলোড ইউআরএল এর মত দেখাচ্ছে:
https://storage.googleapis.com/languagetwo-cd94d.appspot.com/Audio%2FSpanish%2FLatin_America-Sofia-Female-IBM%2Faqu%C3%AD.mp3?GoogleAccessId=languagetwo-cd94d%40appspot.gserviceaccount.com&Expires=4711305600&Signature=WUmABCZIlUp6eg7dKaBFycuO%2Baz5vOGTl29Je%2BNpselq8JSl7%2BIGG1LnCl0AlrHpxVZLxhk0iiqIejj4Qa6pSMx%2FhuBfZLT2Z%2FQhIzEAoyiZFn8xy%2FrhtymjDcpbDKGZYjmWNONFezMgYekNYHi05EPMoHtiUDsP47xHm3XwW9BcbuW6DaWh2UKrCxERy6cJTJ01H9NK1wCUZSMT0%2BUeNpwTvbRwc4aIqSD3UbXSMQlFMxxWbPvf%2B8Q0nEcaAB1qMKwNhw1ofAxSSaJvUdXeLFNVxsjm2V9HX4Y7OIuWwAxtGedLhgSleOP4ErByvGQCZsoO4nljjF97veil62ilaQ%3D%3D
স্বাক্ষরিত ইউআরএলটির মেয়াদ শেষ হওয়ার তারিখ এবং দীর্ঘ স্বাক্ষর রয়েছে। কমান্ড লাইন gsutil signurl -d এর ডকুমেন্টেশন বলে যে স্বাক্ষরিত ইউআরএলগুলি অস্থায়ী: ডিফল্ট মেয়াদোত্তীর্ণতা এক ঘন্টা এবং সর্বাধিক মেয়াদ শেষ হতে সাত দিন।
আমি এখানে রেন্ট করতে চলেছি যে getSidedUrl কখনই বলে না যে আপনার স্বাক্ষরিত ইউআরএল এক সপ্তাহের মধ্যে শেষ হবে। ডকুমেন্টেশন 3-17-2025
কোডটির মেয়াদোত্তীকরণের তারিখ রয়েছে, এটি প্রস্তাব করে যে আপনি ভবিষ্যতে মেয়াদোত্তীর্ণ বছর নির্ধারণ করতে পারেন। আমার অ্যাপটি নিখুঁতভাবে কাজ করেছে এবং তারপরে এক সপ্তাহ পরে ক্র্যাশ হয়ে গেছে। ত্রুটি বার্তায় বলা হয়েছে যে স্বাক্ষরগুলি মেলে না, এটি ডাউনলোড URL টি শেষ হয়ে গেছে। আমি আমার কোডে বিভিন্ন পরিবর্তন করেছি, এবং সমস্ত কিছু কাজ করেছে ... যতক্ষণ না এটি এক সপ্তাহ পরে ক্র্যাশ হয়ে যায়। এটি হতাশার এক মাসেরও বেশি সময় ধরে চলেছিল।
আপনার ফাইল সর্বজনীনভাবে উপলব্ধ করুন
ডকুমেন্টেশনে বর্ণিত হিসাবে আপনি নিজের ফাইলের অনুমতিগুলি সর্বজনীন পঠনের জন্য সেট করতে পারেন । এটি ক্লাউড স্টোরেজ ব্রাউজার বা আপনার নোড সার্ভার থেকে করা যেতে পারে। আপনি একটি ফাইল পাবলিক বা ডিরেক্টরি বা আপনার পুরো স্টোরেজ ডাটাবেস করতে পারেন। নোড কোডটি এখানে:
var webmPromise = new Promise(function(resolve, reject) {
var options = {
destination: ('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.mp3'),
predefinedAcl: 'publicRead',
contentType: 'audio/' + audioType,
};
synthesizeParams.accept = 'audio/webm';
var file = bucket.file('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.webm');
textToSpeech.synthesize(synthesizeParams)
.then(function(audio) {
audio.pipe(file.createWriteStream(options));
})
.then(function() {
console.log("webm audio file written.");
resolve();
})
.catch(error => console.error(error));
});
ফলাফলটি আপনার ক্লাউড স্টোরেজ ব্রাউজারে এটির মতো দেখাবে:
এরপরে যে কেউ আপনার ফাইলটি ডাউনলোড করতে স্ট্যান্ডার্ড পাথটি ব্যবহার করতে পারেন:
https://storage.googleapis.com/languagetwo-cd94d.appspot.com/Audio/English/United_States-OED-0/system.mp3
একটি ফাইল পাবলিক করার আরেকটি উপায় হ'ল মেইকপাবলিক () পদ্ধতিটি ব্যবহার করা । আমি এটি কাজ করতে সক্ষম হইনি, বালতি এবং ফাইলের পাথগুলি সঠিকভাবে পাওয়া খুব কঠিন।
আকর্ষণীয় বিকল্প হ'ল অ্যাক্সেস কন্ট্রোল তালিকা ব্যবহার করা । আপনি কেবলমাত্র যাদের তালিকায় রেখেছেন কেবল সেই ব্যবহারকারীদের authenticatedRead
জন্যই ফাইল সরবরাহ করতে পারেন বা গুগল অ্যাকাউন্ট থেকে লগ ইন হওয়া যে কারও কাছে ফাইলটি উপলব্ধ করতে ব্যবহার করতে পারেন। যদি কোনও বিকল্প থাকে "ফায়ারবেস অথ ব্যবহার করে যে কেউ আমার অ্যাপ্লিকেশনটিতে লগইন করেছে" আমি এটি ব্যবহার করব, কারণ এটি কেবলমাত্র আমার ব্যবহারকারীদের অ্যাক্সেসকে সীমাবদ্ধ করবে।
ফায়ারবেস স্টোরেজডাউনলোডটোকেন সহ আপনার নিজের ডাউনলোড URL টি তৈরি করুন
বেশ কয়েকটি উত্তর একটি অননুমোদিত গুগল স্টোরেজ অবজেক্টের সম্পত্তি বর্ণনা করে firebaseStorageDownloadTokens
। এটির সাহায্যে আপনি স্টোরেজটি যে টোকেনটি ব্যবহার করতে চান তা বলতে পারবেন। আপনি uuid
নোড মডিউলটির সাথে একটি টোকেন তৈরি করতে পারেন । কোডের চার লাইন এবং আপনি আপনার নিজের ডাউনলোডের URL একই ডাউনলোড আপনি যে URL টি কনসোল বা থেকে পেতে নির্মাণ করতে পারেন getDownloadURL()
। কোডের চারটি লাইন হ'ল:
const uuidv4 = require('uuid/v4');
const uuid = uuidv4();
metadata: { firebaseStorageDownloadTokens: uuid }
https://firebasestorage.googleapis.com/v0/b/" + bucket.name + "/o/" + encodeURIComponent('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.webm') + "?alt=media&token=" + uuid);
প্রসঙ্গে কোডটি এখানে:
var webmPromise = new Promise(function(resolve, reject) {
var options = {
destination: ('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.mp3'),
contentType: 'audio/' + audioType,
metadata: {
metadata: {
firebaseStorageDownloadTokens: uuid,
}
}
};
synthesizeParams.accept = 'audio/webm';
var file = bucket.file('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.webm');
textToSpeech.synthesize(synthesizeParams)
.then(function(audio) {
audio.pipe(file.createWriteStream(options));
})
.then(function() {
resolve("https://firebasestorage.googleapis.com/v0/b/" + bucket.name + "/o/" + encodeURIComponent('Audio/' + longLanguage + '/' + pronunciation + '/' + word + '.webm') + "?alt=media&token=" + uuid);
})
.catch(error => console.error(error));
});
এটি কোনও টাইপো নয় - আপনাকে firebaseStorageDownloadTokens
দ্বিগুণ স্তরে বাসা বাঁধতে হবে metadata:
!
ডগ স্টিভেনসন উল্লেখ করেছেন যে firebaseStorageDownloadTokens
এটি কোনও গুগল ক্লাউড স্টোরেজ বৈশিষ্ট্য নয়। আপনি এটি কোনও গুগল ডকুমেন্টেশনে পাবেন না এবং এটির ভবিষ্যতের সংস্করণে কোনও প্রতিশ্রুতি থাকবে না @google-cloud
। আমি পছন্দ করি firebaseStorageDownloadTokens
কারণ আমি যা চাই তা পাওয়ার একমাত্র উপায়, তবে এটির একটি "গন্ধ" রয়েছে যা এটি ব্যবহার করা নিরাপদ নয়।
কেন নোড থেকে getDownloadURL () নেই?
ক্লিটন যেমন লিখেছেন, গুগলের উচিত file.getDownloadURL()
একটি পদ্ধতি তৈরি করা উচিত @google-cloud/storage
(অর্থাত আপনার নোডের ব্যাক এন্ড)। আমি গুগল ক্লাউড ফাংশন থেকে একটি ফাইল আপলোড করতে এবং টোকেন ডাউনলোড URL পেতে চাই।