2012-08-01 3 views
1

내 응용 프로그램에는 파이썬 (bottle.py) 백엔드와 html/jquery 프론트 엔드가 있습니다. 양식에서 '입력'을 사용하여 텍스트 파일을 받고 있는데, 파이썬 측에서 이벤트 처리기를 사용하여 백그라운드에서 업로드하고 있습니다. 그런 다음 이벤트 핸들러가 파일을 구문 분석하고 (반복적으로 file.readline()을 호출) json 형식의 결과를 반환합니다.Python에서 jQuery formdata 구문 분석

파이썬에서 파일을 구문 분석 할 때까지 모든 것이 잘 진행됩니다.

function UploadFile() { 
    var file = $('#data')[0].files[0]; 
    var formData = new FormData(); 
    formData.append("file", file); 
    $.ajax({ 
     url: 'plates', 
     type: 'POST', 
     data: formData, 
     cache: false, 
     contentType: false, 
     processData: false, 
     success: function(data){ 
      ... 
     } 
    }); 
} 

내가 파이썬 측의 POST 요청을받을

, 나는 단지 request.body.read().decode() 그것을 읽을 수 있습니다 :

여기 내 자바 스크립트입니다.

socket.error: [Errno 32] Broken pipe 

난 그냥, request.body.read().decode()와 텍스트를 얻을 파일을 다음로드 및 구문 분석 저장할 수 있습니다 : 나는 request.files.data.file.read()을 시도하고 있다면, 나는 '깨진 파이프'오류가 발생하고있다. 그러나 나는 창조 할 필요가없는 파일을 만드는 것을 피하고, 모든 것을 메모리에서하고 싶다.

request.body.read().decode()이 작동하고 request.files.data.file.read()이 왜 작동하지 않습니까? 파일을 디스크에 쓰지 않고 기존 기능으로 파일을 구문 분석 할 수있는 방법이 있습니까?

답변

1

나는 당신의 요청이 콘텐츠 유형을 "multipart/form-data"와 함께 제출되었는지 확인하는 것이 좋습니다 StringIO를 사용하는 것이 좋습니다. 기본값은 "application/x-www-form-urlencoded"이며, 파일을 구문 분석 할 때 병이 예상하지 않을 수도 있습니다. 당신이

는 또한, 여기에 good discussion about file upload with jQuery입니다 (파일 포함) HTTP에서 다중 양식 처리에 대한 자세한 내용을 원한다면

RFC 2388은 좋은 정보 (두께 임에도 불구하고) 소스입니다.

0

나는 왜 두가지 호출이 다른지 (나는 장고를 사용하는지) 모르겠다. 그러나 디스크에 쓰지 않고 그것을 파싱하는 방법은 새로운 BytesIO 인스턴스를 얻고 그것에 쓰고 그것을 당신의 자리에 사용하는 것이다. 파일 핸들. 단지 부분적인 해결책입니다. 그냥 텍스트 인 경우

대신