Tale: نشر مقال ، بما في ذلك "=" ، "&" ، مما أدى إلى فشل الحفظ

تم إنشاؤها على ١٨ ديسمبر ٢٠١٩  ·  6تعليقات  ·  مصدر: otale/tale

بعد تسجيل الدخول إلى الخلفية ، كتبت مقالًا. نظرًا لأن بعض الأوصاف تتطلب رمزًا ، فقد قمت بإدراج مقتطفات من التعليمات البرمجية.
عندما تم حفظ النتيجة ، وجد أنه تم الإبلاغ عن خطأ في الخلفية.
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: Unable to create temporary file, C:\Users\pys1714\AppData\Local\Temp\Attr_7771572786958116046_{"cid":4,"title":
عندما رأيت خطأً ، اعتقدت في البداية أن استراتيجية الحفظ هي التخزين المؤقت كملف ، وكان هناك قيود على طول البيانات ، لذلك بدأت في حذف النص وتصحيح الأخطاء. لقد اكتشفت أنه لا يبدو أن هناك ملفات مؤقتة يتم إنشاؤها. لذلك كنت أظن أن ذلك كان سببًا لإنشاء الملف.

وفقًا للخطأ ، ابحث عن الطريقة الأساسية io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.parseBodyAttributes()

بعد مراقبة الطريقة ، وجدت أن netty كان يقرأ البيانات التي مررت بها ، ثم أصدر نوعًا من الأحكام واحدًا تلو الآخر.

switch (currentStatus) {
case DISPOSITION:// search '='
     // other code
    break;
case FIELD:// search '&' or end of line
    // other code
    break;
default:
    // just stop
    sao.setReadPosition(0);
    contRead = false;
    break loop;
}

لقد لاحظت أن التعليق يقول للاستعلام عن حرفين "=" و "&". بعد المحاولة ، تحتوي مقالتي فقط على "=" ، انقر فوق "حفظ" ، ويتم الإبلاغ عن خطأ كما هو متوقع:
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: 文件名、目录名或卷标语法不正确。
حاولت "&" مرة أخرى ، وكذلك فعلت.

ليس لدي حل محدد حتى الآن ، لأن الخطأ هو طريقة خاصة للخطأ.

التعليق الأكثر فائدة

وجدت حلاً ، https://juejin.im/post/5c63a028f265da2d9262c662

الطريقة المحددة هي ،

  1. أنشئ حزمة ضمن src / main / java: io.netty.handler.codec.http.multipart

  2. ابحث عن HttpPostStandardRequestDecoder.java من الكود المصدري المقابل لـ netty-codec-http-4.1.30.Final.jar

  3. انسخ كود المصدر إلى الحزمة التي تم إنشاؤها في الخطوة الأولى

  4. ابحث عن parseBodyAttributes() ، وأضف الكود التالي إلى السطر الأول من الطريقة:

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. استخدم الأمر maven package لحزم الحكاية

ال 6 كومينتر

وجدت حلاً ، https://juejin.im/post/5c63a028f265da2d9262c662

الطريقة المحددة هي ،

  1. أنشئ حزمة ضمن src / main / java: io.netty.handler.codec.http.multipart

  2. ابحث عن HttpPostStandardRequestDecoder.java من الكود المصدري المقابل لـ netty-codec-http-4.1.30.Final.jar

  3. انسخ كود المصدر إلى الحزمة التي تم إنشاؤها في الخطوة الأولى

  4. ابحث عن parseBodyAttributes() ، وأضف الكود التالي إلى السطر الأول من الطريقة:

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. استخدم الأمر maven package لحزم الحكاية

حسنًا ، بعد البحث لفترة طويلة ، وجدت أن الطبقة السفلية من Blade أبلغت عن خطأ. القلب مكسور. جرب طريقتك أولاً.شكرا

شكرا لك على الطريقة ، لكن بقراءة الكود ، لم أفهم المبدأ. .التعبير عن الجهل

قم بترقية تبعية Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

قم بترقية تبعية Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

حاولت ذلك ، مما يعني أن المشكلة لا يمكن حلها. . .

وجدت حلاً ، https://juejin.im/post/5c63a028f265da2d9262c662

الطريقة المحددة هي ،

  1. أنشئ حزمة ضمن src / main / java: io.netty.handler.codec.http.multipart
  2. ابحث عن HttpPostStandardRequestDecoder.java من الكود المصدري المقابل لـ netty-codec-http-4.1.30.Final.jar
  3. انسخ كود المصدر إلى الحزمة التي تم إنشاؤها في الخطوة الأولى
  4. ابحث عن parseBodyAttributes() ، وأضف الكود التالي إلى السطر الأول من الطريقة:
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. استخدم الأمر maven package لحزم الحكاية
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}

هذه المعلمة لأسفل ↓

if(!this.request.headers().get("Content-Type").startsWith("application/x-www-form-urlencoded")){
            return;
 }

الحل الأمثل👍
A(G1% (QH{7~MTO)O438YC5
A(G1% (QH{7~MTO)O438YC5

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

EchoXml picture EchoXml  ·  3تعليقات

pkwenda picture pkwenda  ·  53تعليقات

dzy0302 picture dzy0302  ·  10تعليقات

panjf2000 picture panjf2000  ·  5تعليقات

gqb picture gqb  ·  7تعليقات