سؤال

أنا أستخدم برنامج Perl النصي للنشر إلى تطبيق Google Appengine.أقوم بنشر ملف نصي يحتوي على بعض XML باستخدام الخيار -F.

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 صحيحًا، فلا تقلق بشأن ذلك.إلى المشكلة.يتطابق طول المحتوى مع عدد البايتات الموجودة في الملف، ولكن ما لم أقم بزيادة طول المحتوى يدويًا، فإنه لا يرسل الملف بالكامل، ويتم اقتطاع عدد قليل من البايتات.عدد البايتات المقطوعة ليس هو نفسه بالنسبة للملفات ذات الأحجام المختلفة.لقد استخدمت الخيار -r في البرنامج النصي ويمكنني رؤية ما يرسله وهو يرسل كل الملف، لكن Google Appengine self.request.body يُظهر أنه لم يتم استلام كل شيء.أعتقد أن الحل هو الحصول على الرقم الصحيح لطول المحتوى ويبدو أن الأمر ليس بهذه البساطة مثل عدد البايتات الموجودة في الملف أو أن البرنامج النصي Perl يفسده بطريقة ما.

تحديث:شكرا لإريكسون على الإجابة الصحيحة.لقد استخدمت printf لإلحاق الأحرف بنهاية الملف وكان دائمًا يقتطع بالضبط عدد الأسطر في الملف.أفترض أنه يمكنني معرفة ما تتم إضافته من خلال التكرار عبر كل حرف على جانب الخادم ولكن لا يستحق ذلك.لم يتم الرد على هذا حتى في مجموعات Google التي تم إعدادها لمحرك التطبيق!

هل كانت مفيدة؟

المحلول

هل عدد البايتات الإضافية التي تحتاجها يساوي عدد الأسطر في الملف؟أسأل لأنه ربما يكون من الممكن أن يتم تقديم إرجاع السطر بطريقة أو بأخرى ولكن لا يتم احتسابها.

نصائح أخرى

لقد واجهت مشاكل مماثلة من قبل.

أفترض أنك تستخدم الدالة length() لتحديد حجم الملف؟إذا كان الأمر كذلك، فمن المحتمل أن تكون البيانات التي تنشرها مشفرة بـ UTF-8، بدلاً من ASCII.

للحصول على العد الصحيح ، قد تحتاج إلى إضافة "استخدام بايت" ؛ براجما إلى أعلى البرنامج النصي الخاص بك ، أو لف مكالمة الطول في كتلة:

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

من صفحة رجل perfunc:

"لاحظ الشخصيات:إذا كان EXPR بتنسيق Unicode، فستحصل على عدد الأحرف، وليس عدد البايتات."

كيف تحصل على عدد البايتات؟..من خلال النظر إلى حجم الملف على نظام الملفات؟

يمكنك استخدام "-s" للحصول على حجم الملف.

أو، إذا كنت تريد أن تفعل المزيد، يمكنك استخدام ملف::Stat

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top