मैं इस बात से परिचित नहीं हूं कि एस 3 कैसे काम करता है, इसलिए मुझे नहीं पता कि यह समाधान संभव है या नहीं। लेकिन क्या आप बस उपयोगकर्ता के ब्राउज़र को फाइल पर रीडायरेक्ट नहीं कर सके? अगर मैं सही ढंग से समझता हूं, तो एस 3 आपको अपनी बाल्टी में किसी भी फाइल के लिए वेब यूआरएल बनाने की अनुमति देता है। इसलिए, अगर, इन्हें भुगतान का भुगतान किया जाता है, तो आप have S3 generate a temporary URL for that download कर सकते हैं और फिर उपयोगकर्ता को डाउनलोड करने के बाद इसे हटा दें।
अगर वह एक विकल्प नहीं है, तो आप इन पीएचपी वर्ग की कोशिश कर सकते हैं:
- HTTP protocol client - एक वर्ग जो HTTP संसाधनों के लिए अनुरोध को लागू करता है (नीचे धारा आवरण द्वारा प्रयुक्त)। अनुरोधों को स्ट्रीम करने की अनुमति देता है।
- gHttp - एक HTTP धारा आवरण आप फ़ाइलों के रूप में दूरदराज HTTP संसाधनों का इलाज
fopen()
, fread()
जैसे कार्यों का उपयोग कर देता है कि, आदि
- Amazon S3 Stream Wrapper - gHttp रूप में एक ही डेवलपर द्वारा एक अमेज़न S3 धारा आवरण।
fopen('s3://...')
के माध्यम से दूरस्थ फ़ाइलों को सामान्य फ़ाइलों की तरह एक्सेस करने की अनुमति भी देता है।
संपादित करें:
This page पर जानकारी है कि कैसे "पूर्व प्रमाणित" यूआरएल में प्रमाणीकरण कुंजी एन्कोडिंग द्वारा किए गए अनुरोध के। यह शीर्षक वाले अनुभाग के तहत है: क्वेरी स्ट्रिंग अनुरोध प्रमाणीकरण वैकल्पिक।
// I'm only implementing the parts required for GET requests.
// POST uploads will require additional components.
function getStringToSign($req, $expires, $uri) {
return "$req\n\n\n$expires\n$uri";
}
function encodeSignature($sig, $key) {
$sig = utf8_encode($sig);
$sig = hash_hmac('sha1', $sig, $key);
$sig = base64_encode($sig);
return urlencode($sig);
}
$expires = strtotime('+1 hour');
$stringToSign = getStringToSign('GET', $expires, $uri);
$signature = encodeSignature($stringToSign, $awsKey);
$url .= '?AWSAccessKeyId='.$awsKeyId
.'&Expires='.$expires
.'&Signature='.$signature;
तो बस $url
करने के लिए उपयोगकर्ता अनुप्रेषित, और वे फ़ाइल डाउनलोड करने के लिए सक्षम होना चाहिए। हस्ताक्षर एक तरफा एन्क्रिप्शन योजना (sha1) द्वारा एन्कोड किया गया है, इसलिए आपके एडब्ल्यूएस गुप्त एक्सेस कुंजी का खुलासा होने का कोई खतरा नहीं है।
एक चिंता जो मुझे पुनर्निर्देशन के साथ होगी, यह है कि आपको यह सत्यापित करने की आवश्यकता है कि आपकी सुरक्षा पास नहीं हुई है। अगर पुनर्निर्देशन प्राधिकरण की आवश्यकता है, तो आप इसे ग्राहक को दे रहे हैं। – Joe
ठीक है, यही कारण है कि एक अस्थायी सार्वजनिक यूआरएल उत्पन्न होता है। इस तरह कोई प्रमाणीकरण जानकारी पास नहीं की जाती है, और उपयोगकर्ता को फ़ाइल प्राप्त होने के बाद यूआरएल चला जाता है (या एक निश्चित समय सीमा के बाद)। – Calvin
मुझे नहीं लगता कि यह मेरे नामकरण जोखिम को संबोधित करता है। अगर मैं सीधे डाउनलोड करने की अनुमति देने के लिए दो फाइलों को सार्वजनिक फ़ोल्डर में ले जाता हूं, तो मुझे उन्हें दोस्ताना नाम देना होगा। यह संभव है कि उनके पास एक ही नाम है, और फिर मैं अटक गया हूं। – Corey