storage에 저장한 이미지를 불러오기 위해 storage에서 publicUrl을 가져오려고 했다. 그런데 url은 만들어지는데, 계속 이미지가 뜨지 않는 오류가 발생했다. 해당 url을 직접 브라우저에 입력해서 확인해보니 아래와 같은 값을 볼 수 있었다.
{"statusCode":"404","error":"Bucket not found","message":"Bucket not found"}
조금 검색해보니 해당 버킷을 'public'으로 설정하지 않아서 발생한 오류였다.
해결방법 1 - 버킷을 public으로 설정하기
따라서 storage의 해당 버킷 이름의 오른쪽에 토글 버튼을 눌러 'edit bucket'에 들어가서 public으로 바꿔주면 된다.
이러면 `getPublicUrl` 메소드의 값을 잘 사용할 수 있다.
해결방법 2 - `getSignedUrl` 메소드 사용하기
public으로 만들기 싫다면 `getSignedUrl` 메소드를 사용하면 된다. 이 메소드는 `getPublicUrl`과 달리 비동기 함수이다. 또한 해당 url을 유지할 수 있는 시간을 초 단위로 지정할 수 있다.
const getImageUrl = async (path) => {
const { data:{signedUrl}, error } = await supabase.storage.from(<storage name>).getSignedUrl(path, 60)
return signedUrl;
}
위 코드는 60초, 즉 1분 동안 유효한 url을 반환한다.
참고로 여러 이미지에 대한 signedUrl을 받고 싶다면, `getSignedUrls` 메소드를 사용하고 path로 이루어진 배열을 path자리에 넣으면 된다.
위 내용을 확인할 수 있는 공식 문서도 첨부한다.
'Frontend > Today I Learned' 카테고리의 다른 글
[React, TS] Input 이미지 파일 미리보기 (0) | 2024.10.14 |
---|---|
[Next.js] Link 태그에 버튼을 넣었을 때 페이지 이동 막기 (1) | 2024.10.13 |
[Next.js] 쉬운 성능 최적화 방법 소개 (0) | 2024.10.11 |
[Next.js] Middleware로 잘못된 경로 접근 시 redirect하기 (2) | 2024.10.03 |
[Next.js] TanStack Query로 count up/down 기능 구현하기 (2) | 2024.10.01 |