मैं हाल ही में काम के साथ एडब्ल्यूएस एसडीके और इस प्रकार बहाना कृपया अगर मेरे दृष्टिकोण पूरी तरह बकवास है.
मैं करना चाहते हैं अपलोड करने के लिए एक सरल मीडिया फाइल करने के लिए मेरे S3. मैं के बाद किया गया था इस ट्यूटोरियल और अब तक मैं कर रहा हूँ फ़ाइलें अपलोड करने के लिए एक समस्या के बिना. के लिए userbility एक प्रगति पट्टी के लिए किया जाएगा एक अच्छा अतिरिक्त और इसलिए मैं शोध कर रहा था के लिए कैसे इस लक्ष्य को हासिल । मैं जल्दी से पाया है कि वर्तमान एडब्ल्यूएस एसडीके v3 समर्थन नहीं करता है httpUploadProgress
अब लेकिन हम का उपयोग करना चाहिए @aws-sdk/lib-storage
के बजाय. इस पुस्तकालय का उपयोग कर, मैं हूँ अभी भी में सक्षम करने के लिए फ़ाइलों को अपलोड करने के लिए S3 लेकिन मैं नहीं मिल सकता है प्रगति पर नजर रखने के लिए काम करते हैं! मुझे लगता है इस के साथ क्या कुछ किया मुझे पूरी तरह से नहीं समझ कैसे से निपटने के लिए async
के भीतर एक प्रतिक्रिया के घटक है ।
तो यहाँ है मेरे minified घटक उदाहरण के लिए (मैं का उपयोग कर रहा हूँ चक्र यूआई यहाँ)
const TestAWS: React.FC = () => {
const inputRef = useRef<HTMLInputElement | null>(null);
const [progr, setProgr] = useState<number>();
const region = "eu-west-1";
const bucketname = "upload-test";
const handleClick = async () => {
inputRef.current?.click();
};
const handleChange = (e: any) => {
console.log('Start file upload');
const file = e.target.files[0];
const target = {
Bucket: bucketname,
Key: `jobs/${file.name}`,
Body: file,
};
const s3 = new S3Client({
region: region,
credentials: fromCognitoIdentityPool({
client: new CognitoIdentityClient({ region: region }),
identityPoolId: "---MY ID---",
}),
});
const upload = new Upload({
client: s3,
params: target,
});
const t = upload.on("httpUploadProgress", progress => {
console.log("Progress", progress);
if (progress.loaded && progress.total) {
console.log("loaded/total", progress.loaded, progress.total);
setProgr(Math.round((progress.loaded / progress.total) * 100)); // I was expecting this line to be sufficient for updating my component
}
});
await upload.done().then(r => console.log(r));
};
console.log('Progress', progr);
return (
<InputGroup onClick={handleClick}>
<input ref={inputRef} type={"file"} multiple={false} hidden accept='video/*' onChange={e => handleChange(e)} />
<Flex layerStyle='uploadField'>
<Center w='100%'>
<VStack>
<PlusIcon />
<Text>Choose Video File</Text>
</VStack>
</Center>
</Flex>
{progr && <Progress value={progr} />}
</InputGroup>
);
};
export default TestAWS;
तो मूल रूप से मैं देख रहा हूँ घटना निकाल दिया हो रही (start फ़ाइल अपलोड करें). तो यह एक समय लेता है और मैं वादा परिणाम और Progress, 100
मेरी सांत्वना है । इसका मतलब यह है कि मुझे राज्य चर अद्यतन किया जाता है (कम से कम एक बार), लेकिन घटक नहीं करता है फिर से प्रस्तुत करना?
क्या है यह मैं क्या कर रहा हूँ गलत? यहाँ किसी भी मदद की सराहना!!!
lib-storage
कभी नहीं था करने के लिए इस्तेमाल किया जा सकता के लिए फाइल अपलोड. दुर्भाग्य से, यह लगता है कि वहाँ वर्तमान में कोई संतोषजनक समाधान का उपयोग करते समय v3 (के बाद से यह उपयोग में लाने एपीआई हुड के तहत) और अपलोड छोटे फ़ाइलें । तो अपने दृष्टिकोण निश्चित रूप से एक अच्छा समाधान, लेकिन उम्मीद है कि वे कुछ को लागू एसडीके में बहुत जल्द ही.