나는 최근을 다루는 AWS SDK 고,따라서 바이러면 방법이 있다.
고 싶은 업로드 간단한 미디어 파일을 내 S3. 나는 다음과 같은 이 튜토리얼 그리고 지금까지 나는 파일을 업로드하지 않고 문제입니다. 에 대한 userbility 진행 표시줄 것이 좋은 추가하고 따라서 연구를 달성하는 방법이다. 나는 빠르게 발견되는 현재의 AWS SDK v3 지원하지 않는 httpUploadProgress
더 이상 하지만 우리가 사용해야 한다 @aws-sdk/lib-storage
대신 합니다. 이 라이브러리를 사용하여,내가 여전히 파일을 업로드할 수 있 S3 얻을 수있는 가장 쉬운 방법을 진행을 추적하는 작업! 나는 가정이 할 수있는 뭔가가 나와 함께 완전히 이해 처리하는 방법 async
에 반응하는 구성 요소입니다.
그래서 여기에 내가 최소화되는 구성 요소 예에서(내가 사용하고 차크라 UI 여기)
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
내 console. 이 의미는 상태변수 업데이트되면(예)그러나 구성 요소지 않을 렌더링합니까?
그것은 무엇을 내가 뭘 잘못된까요? 어떤 도움에 감사드립니다!
lib-storage
지 않았을 위해 사용되는 것을 의미하는 작은 파일을 업로드되어 있습니다. 불행하게도,그것은 현재 없을 만족하는 솔루션을 사용할 때 v3 (때문에 그것을 사용하여 가 api 후드)에 업로드하는 작은 파일입니다. 그래서 당신의 접근 방식은 확실히 좋은 해결 방법이지만 희망이 그들이 구현하는 것은 뭔가 SDK 에서는 매우 빨리.