Snap을 사용하여 파일 업로드 프로세스를 이해해야합니다.이진 파일 업로드 스냅
<form id="form" action="/files/upload" method="POST" enctype="multipart/form-data">
<input type="file" id="files" name="files[]" multiple />
<button type="submit" onclick="handleFiles(e)">Upload</button>
</form>
내가 바이너리 파일을 처리 할 수 getPostParams 같은 동일한 기능을 사용하십니까 아니면 내가 Snap.Util.FileUploads에서 기능을 사용합니까 :
이 양식을 감안할 때?
PDF와 같은 이진 파일을 데이터베이스에 업로드하고 저장해야합니다. 데이터베이스 드라이버는 바이너리 파일을 저장하기 위해 ByteString을 허용합니다.
나는 Snap.Util.FileUploads를 통과했지만 내가 필요로하는 것처럼 보이지 않습니다. 그래서 처리기에서 어떻게 처리해야할지 모르겠습니다.
감사합니다. IRC의 도움으로
편집 나는 아래의 구조로 올 수 있었다. 나는 그것을 수정해야한다고 생각한다 ?? 음, mongodb에 파일을 컴파일하고 덤프합니다. 나는 또한 그것을 읽을 수있다. 나는 꽤 열거 및 Iteratee 물건 ...
handleFiles :: AppHandler()
handleFiles = do
[file] <- handleMultipart defaultUploadPolicy $ \part -> do
content <- liftM BS.concat EL.consume
return content
let b = ["file" =: Binary file]
r <- eitherWithDB $ insert "tests" b
either (error . show) (const $ return()) r
감사합니다. 들어오는 파일 크기의 보안을 제어 할 수 있다고 생각했는데, 클라이언트 쪽에서 html5 File API를 통해 유형을 입력했습니다. 적어도 지금은 ... 어쩌면 난 그냥 handleFileUploads 함수가 작동하는 방법을 모르겠다. ByteString을 잡아서 ByteString을 데이터베이스 드라이버에 전달할 수 있도록 들어오는 ByteString이 있습니다. handleFileUploads 함수는 Handler를 매개 변수로 사용하여 PartInfo와 FilePath를 차례로 사용합니다. 그래서 우리는 FilePath에 대해 이야기하고 있습니까? 브라우저에서 ByteString을 가져 오는 방법은 무엇입니까? handleFileUploads가 어떻게 작동하는지 설명해 주시겠습니까? –
답변을 업데이트했습니다. – mightybyte
도움 주셔서 감사합니다. handleMultipart 함수를 올바르게 사용하여 내 질문을 업데이트했습니다. handleFileUploads 사용법이 비슷해야합니다. –