2012-12-28 4 views
1

json을 사용하여 이진 파일을 업로드하고 싶습니다. 파일로 인해 추가 정보를 보내고 싶기 때문에 Json을 선택합니다. Json을 사용하여 파일 게시

나는이 작업을 수행하기 위하여려고하고있다 -
  1. 파일 입력 태그에서 파일을 선택합니다.
  2. 먼저 HTML5 파일 판독기 API를 사용하여 파일을 읽습니다.
  3. 파일 내용을 base64로 변환하십시오.
  4. 데이터 URI 형식의 JS 개체에 base64 콘텐츠를 추가합니다.
  5. JS 개체를 json으로 변환하여 서버에 게시하십시오.

이것이 내 목표를 달성하는 유일한 방법 일까? 또한이 기능을 제공하는 어딘가에서 이미 사용할 수있는 플러그인이 있다면?

+1

추가 데이터를 게시해야하는 경우 숨겨진 입력 필드를 사용하지 않는 이유는 무엇입니까? 파일 판독기 (Compatibility?), Base64 인코딩 데이터 또는 JSON을 사용하지 않아도되므로 구현하기가 더 쉽습니다. POST에서 값을 가져올 수 있습니다. – Cerbrus

+0

Ajax를 사용해야합니다. 양식 제출은 훌륭한 해결책이 아닙니다. 내가 성공할 수 있다면 나는 이것을 플러그인으로 변환 할 것이다. 이를 통해 추가 데이터가 포함 된 파일을 쉽게 업로드 할 수 있습니다. – Tushar

+0

@TusharMathur : AJAX 사용을 주장하는 경우 HTML5 API를 사용하더라도 기존 솔루션 (예 : 여러 부분 양식 데이터)을 고수 할 수 있습니다. Flash 기능 등을 사용하는 솔루션이 있지만 대신 HTML5를 사용할 수 있다면 훌륭한 방법입니다. – Tadeck

답변

0

아니요, 이것이 유일한 방법은 아닙니다. 다른 방법 중 하나는 파일이 포함 된 양식을 제출하는 것입니다. 이러한 양식은 multipart/form-data 콘텐츠 형식을 사용합니다.

W3C documentation on the subject를 참조하십시오

내용 유형 "application/x-www-form-urlencode D"비 ASCII 문자가 포함 된 이진 데이터 나 텍스트의 많은 양을 전송하는 비효율적이다.

내용 유형 "multipart/form-data은"파일, ASCII가 아닌 데이터 및 바이너리 데이터를 포함 할 양식을 위해 사용되어야한다. 브라우저가 이미 간단한 방법으로, 추가 정보와 함께 파일을 전송 지원 -

그래서 바퀴를 재발견 할 필요가 없다. 사용자가 데이터를 입력하고 파일을 선택할 수있는 양식을 작성한 다음 모두가 multipart/form-data 콘텐츠 유형으로 서버에 전송되고 웹 프레임 워크는 파일과 텍스트 데이터를 모두 처리한다는 것을 이해할 수 있어야합니다.

+0

데이터의 크기도 고려하십시오. 내가 아는 한 base64로 인코딩 된 데이터는 원본 파일의 크기의 3 배가됩니다. – Tadeck

+0

귀하의 솔루션은 ajax 파일 업로드를위한 jquery 플러그인과 정확히 같습니다. 당신의 요점이 유효하다는 것을 알았습니다. 그래서 json을 사용하여 파일을 업로드 할 수 있다는 이점이 있습니까? 유스 케이스가 없습니까? – Tushar

+0

일반적으로 파일을 업로드 할 때 JSON을 사용하고 싶지 않습니다. 바이너리 데이터를 일반 _text_ (base64)로 변환 중입니다. 항상 더 많은 공간을 차지합니다. 파일을 먼저 b64로 변환해야합니다. – Cerbrus