Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- map()
- 항해99솔직후기 #항해99장점 #항해99단점 #부트캠프추천
- useEffect()
- useRef()
- Math.floor()
- sort()
- getday()
- 차집합
- substring()
- useState()
- reat if문
- Number()
- Math.sqrt()
- Eventlitener
- setDate
- 소수점 올림내림
- isNaN()
- parseInt()
- new Date()
- React
- 교집합
- filter()
- 3진수
- jsx반복문
- charAt()
- includes()
- toUpperCase()
- slice()
- repeat()
- indexOf()
Archives
- Today
- Total
개발자로 전향중
Cloudflare 200MB이상 다이렉트 업로드 본문
파일이 캐싱이 되어 같은 파일일 경우 통신은 되지만 서버 전달은 안됨으로 주의!
const App = () => {
useEffect(() => {
const uppy = new Uppy({
debug: true,
autoProceed: true,
})
const onUploadSuccess = (el: string) => (file: File, response: any) => {
const li = document.createElement('li')
const a = document.createElement('a')
a.href = response.uploadURL
a.target = '_blank'
a.appendChild(document.createTextNode(file.name))
li.appendChild(a)
const uploadedFiles = document.querySelector(el)
if (uploadedFiles) {
uploadedFiles.appendChild(li)
}
}
uppy
.use(DragDrop, { target: '#drag-drop-area' })
.use(Tus, {
endpoint: '/api/get-upload-url',
chunkSize: 150 * 1024 * 1024,
})
.use(ProgressBar, { target: '.for-ProgressBar', hideAfterFinish: false })
.on('upload-success', onUploadSuccess('.uploaded-files ol'))
const uploadBtn = document.querySelector('button.upload-button')
if (uploadBtn) {
uploadBtn.addEventListener('click', () => uppy.upload())
}
return () => {
uppy.close()
}
}, [])
return (
<div>
<div id="drag-drop-area" style={{ height: '300px' }} />
<div className="for-ProgressBar" />
<button
className="upload-button"
style={{ fontSize: '30px', margin: '20px' }}
>
Upload
</button>
<div className="uploaded-files" style={{ marginTop: '50px' }}>
<ol></ol>
</div>
</div>
)
}
import { NextRequest, NextResponse } from 'next/server'
export async function POST(req: NextRequest) {
const corsHeaders = {
'Access-Control-Expose-Headers': '*',
'Access-Control-Allow-Headers': '*',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
}
const CLOUDFLARE_API_TOKEN = ''Cludflare 나 stream 할거야~하면서 생성해야함'
const CLOUDFLARE_ACCOUNT_ID = '돈주면 대시보드 옆에 친절히 나와잇음'
const endpoint = `https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/stream?direct_user=true`
const response = await fetch(endpoint, {
method: 'POST',
headers: <HeadersInit>{
Authorization: `bearer ${CLOUDFLARE_API_TOKEN}`,
'Tus-Resumable': '1.0.0',
'Upload-Length': req.headers.get('Upload-Length'),
'Upload-Metadata': req.headers.get('Upload-Metadata'),
},
})
const destination = response.headers.get('Location')
console.log(destination, '비디오 업로드 갑니다')
return new NextResponse('', {
headers: <HeadersInit>{ ...corsHeaders, Location: destination },
})
}
'React' 카테고리의 다른 글
FE 렌더링 최적화 히스토리 (1) | 2023.11.01 |
---|---|
CloudFlare Stream Cloud에 다이렉트 업로드 (0) | 2023.10.17 |
Buffer image 데이터 base64으로 만들기 (0) | 2023.02.01 |
TypeScript 환경변수 설정하고 싶을때 (0) | 2022.12.02 |
Redux-Toolkit TypeScript 여러개의 객체를 배열 추가할때 (0) | 2022.11.24 |