aiohttp에서 큰 파일을 업로드하는 법

파일 업로드는 보통 요청의 body에 인코딩된 파일 데이터를 넣어서 POST 요청으로 서버에 전달되는데, aiohttp에서는 다음과 같이 post를 처리하는 핸들러를 사용해서 이를 처리할 수 있다. async def store_mp3_handler(request):   data = await request.post()   mp3 = data[‘mp3’]   filename = mp3.filename   mp3_file = mp3.file   content = mp3_file.read()   return web.Response(body=content, headers=      MultiDict({ ‘CONTENT-DISPOSITION’:

델리게이트 패턴에서 제네릭으로 – Swift

(제목이 스포일러이긴한데…) 간단한 클래스를 하나 작성해보자. 0으로 시작하는 값에서 메소드를 하나를 호출하면 그 값을 1씩 증가시켜나가는 것이다. class Counter {   var value: Int = 0   func increase() {     value += 1     print(“value: \(value)”)   } } 현실적으로는 별 쓸 데 없는 이 클래스를 사용하려 할 때, 값이 변할 때 수행하는 동작을 입맛에 맞게 커스터마이징하고 싶은 경우가 있을 수 있다. 물론 increase() 메소드를 그 때 그 때마다 변경하면

프로퍼티 리스트 타입

프로퍼티 리스트는 코코아의 표준 데이터 타입 클래스들을 직렬화/역직렬화하는데 사용되는 구조화된 데이터 포맷이다. 프로퍼티 리스트는 .plist 라는 확장자의 파일로 기록되어 코코아 앱에서 광범위하게 쓰인다. 특히 모든 코코아/코코아터치 앱의 번들에는 기본적으로 Info.plist라는 파일이 있고, 이 파일은 앱의 기본적인 론칭에 필요한 필수적인 정보들(메인 nib파일 및 스토리보드 경로등)이 지정되어 있다. 프로퍼티 리스트는 구조화된 트리이며, 파일로 저장될 때에는 XML의 형식이나

이중옵셔널에 대하여 – Swift

Swift의 캐스팅 연산자인 as? 는 T 타입으로 캐스팅에 실행할 가능성을 내포하기 때문에 T? 타입을 만들게 된다. 이 때 변환하려는 값이 이미 옵셔널타입인 경우에는 nil이 아니면 T 타입으로 간주하여 최종 결과는 T??가 아닌 T?가 된다. var a: Any? = 8 if let x = a as? Int { // a는 Any?이면서 그 값이 Int 형으로 변환될