ฉันเป็นเพียงเมื่อเร็วๆนี้กำลังรับมือกับพว AWS SDK และดังนั้นโปรดยกโทษถ้าผมเข้าใกล้คือสมบูรณ์ไร้สาระน่า
ฉันต้องการที่จะอัพโหลดเรียบง่ายของสื่อแฟ้มของฉั S3. ฉันกำลังสะกดรอยตาม นี้ comment และตอนนี้ฉันสามารถอัพโหลดแฟ้มโดยไม่มีปัญหาแล้ว สำหรับ userbility เป็นความคืบหน้าบาร์จะดีที่พิเศษแล้วดังนั้นฉันค้นคว้าวิธีที่จะประสบความสำเร็จในส่วนี้ ฉันรีบพบว่าที่ ปัจจุบัน AWS SDK v3 ไม่รองรับ httpUploadProgress
อีกแล้ว แต่พวกเราควรใช้ @aws-sdk/lib-storage
แทน ใช้ห้องสมุดฉันยังคงสามารถอัพโหลดแฟ้มเพื่อที่ S3 แต่ฉันไม่สามารถได้รับความคืบหน้าแทร็กเกอร์ทำงาน! ฉันคิดว่ามีบางอย่างที่เกี่ยวกับฉันไม่ได้เต็มที่เข้าใจวิธีจัดการกับ async
ภายในมีปฏิกิริยายส่วนประกอบ.
ดังนั้นนี่คือของฉัน minified ส่วนประกอบตัวอย่าง(ฉันใช้ Chakra ส่วนติดต่อผู้ใช้อยู่)
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;
พูดง่ายๆก็คือฉันเห็นเหตุการณ์โดนไล่ออก (เริ่มแฟ้มการอัปโหลด). งั้นมันต้องใช้เวลาหน่อยและฉันเห็นสัญญากับผลลัพธ์และ Progress, 100
ในของฉันคอนโซล. มันมีความหมายกับฉันแค่ไหนที่ของรัฐตัวแปรได้ปรับปรุง(อย่างน้อยก็ครั้งนึงแต่คนส่วนประกอบยังไม่กลัจัดการพา?
มันคืออะไรสิ่งที่ฉันกำลังทำผิดอยู่ที่นี่? ที่เขาแนะนำให้ผูกผ้ากันเปื้อนเกียรติอย่างยิ่!
lib-storage
มันไม่เหมาะที่จะใช้สำหรับแฟ้มเล็ uploads. โชคร้ายที่มันดูเหมือนมีอยู่ปัจจุบันที่ไม่พอใจแก้ปัญหาเมื่อใช้ v3 (ตั้งแต่มันใช้อข้อมูลรูปแบบ api องใต้กระโปรงและการอัพโหลดเล็กน้องแฟ้ม ดังนั้นวิธีการของคุณเป็นอย่างแน่นอที่ดี workaround แต่หวังว่าพวกเขาจะรับคำสั่งเข้าใจบางอย่างใน SDK เร็วๆนี้