문제

Google Appengine 애플리케이션에 POST하기 위해 Perl 스크립트를 사용하고 있습니다.-F 옵션을 사용하여 일부 XML이 포함된 텍스트 파일을 게시합니다.

http://www.cpan.org/authors/id/E/EL/ELIJAH/bget-1.1

버전 1.2가 이미 테스트되었으며 동일한 문제가 발생합니다.포스팅은 대략 이렇습니다.

Host: foo.appspot.com
User-Agent: lwp-request/1.38
Content-Type: text/plain
Content-Length: 202

<XML>
   <BLAH>Hello World</BLAH>
</XML>

202가 옳지 않도록 예제를 수정했습니다. 걱정하지 마세요.문제에 대해.Content-Length는 파일의 바이트 수와 일치하지만 Content-Length를 수동으로 늘리지 않으면 모든 파일이 전송되지 않고 몇 바이트가 잘립니다.잘린 바이트 수는 크기가 다른 파일에 대해 동일하지 않습니다.스크립트에서 -r 옵션을 사용했는데 전송 내용과 모든 파일을 전송하는 것을 볼 수 있지만 Google Appengine self.request.body는 모든 항목이 수신되지는 않음을 보여줍니다.나는 해결책이 Content-Length에 대한 올바른 숫자를 얻는 것이라고 생각하며 분명히 파일의 바이트 수만큼 간단하지 않거나 Perl 스크립트가 어떻게 든 그것을 엉망으로 만들고 있습니다.

업데이트:정답을 주신 Erickson에게 감사드립니다.나는 printf를 사용하여 파일 끝에 문자를 추가했는데 항상 파일의 줄 수만큼 정확하게 잘렸습니다.서버 측의 모든 문자를 반복하여 추가되는 것이 무엇인지 알아낼 수 있지만 그럴 가치가 없다고 생각합니다.앱 엔진에 설정된 Google 그룹에서도 이에 대한 답변이 없습니다!

도움이 되었습니까?

해결책

필요한 추가 바이트 수가 파일의 줄 수와 동일합니까?캐리지 리턴이 도입되었지만 계산되지 않을 가능성이 있기 때문에 묻습니다.

다른 팁

이전에도 비슷한 문제가 발생했습니다.

파일 크기를 결정하기 위해 length() 함수를 사용하고 있다고 가정합니까?그렇다면 게시하는 데이터가 ASCII가 아닌 UTF-8로 인코딩되었을 가능성이 높습니다.

올바른 카운트를 얻으려면 "바이트 사용"을 추가해야 할 수도 있습니다. 스크립트의 상단에 Pragma 또는 길이 통화를 블록에 감싸십시오.

my $size;
do {use bytes; $size = length($file_data)}

perlfunc 매뉴얼 페이지에서:

"캐릭터 참고:EXPR이 유니코드인 경우 바이트 수가 아닌 문자 수를 얻게 됩니다."

바이트 수는 어떻게 구합니까?..파일 시스템의 파일 크기를 살펴봄으로써?

"-s"를 사용하여 파일 크기를 확인할 수 있습니다.

또는 더 많은 작업을 수행하려면 다음을 사용할 수 있습니다. 파일::통계

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top