بعد تسجيل الدخول إلى الخلفية ، كتبت مقالًا. نظرًا لأن بعض الأوصاف تتطلب رمزًا ، فقد قمت بإدراج مقتطفات من التعليمات البرمجية.
عندما تم حفظ النتيجة ، وجد أنه تم الإبلاغ عن خطأ في الخلفية.
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
الطريقة المحددة هي ،
أنشئ حزمة ضمن src / main / java: io.netty.handler.codec.http.multipart
ابحث عن HttpPostStandardRequestDecoder.java
من الكود المصدري المقابل لـ netty-codec-http-4.1.30.Final.jar
انسخ كود المصدر إلى الحزمة التي تم إنشاؤها في الخطوة الأولى
ابحث عن parseBodyAttributes()
، وأضف الكود التالي إلى السطر الأول من الطريقة:
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
return;
}
حسنًا ، بعد البحث لفترة طويلة ، وجدت أن الطبقة السفلية من 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
الطريقة المحددة هي ،
- أنشئ حزمة ضمن src / main / java:
io.netty.handler.codec.http.multipart
- ابحث عن
HttpPostStandardRequestDecoder.java
من الكود المصدري المقابل لـ netty-codec-http-4.1.30.Final.jar- انسخ كود المصدر إلى الحزمة التي تم إنشاؤها في الخطوة الأولى
- ابحث عن
parseBodyAttributes()
، وأضف الكود التالي إلى السطر الأول من الطريقة:if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){ return; }
- استخدم الأمر 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;
}
الحل الأمثل👍
التعليق الأكثر فائدة
وجدت حلاً ، https://juejin.im/post/5c63a028f265da2d9262c662
الطريقة المحددة هي ،
أنشئ حزمة ضمن src / main / java:
io.netty.handler.codec.http.multipart
ابحث عن
HttpPostStandardRequestDecoder.java
من الكود المصدري المقابل لـ netty-codec-http-4.1.30.Final.jarانسخ كود المصدر إلى الحزمة التي تم إنشاؤها في الخطوة الأولى
ابحث عن
parseBodyAttributes()
، وأضف الكود التالي إلى السطر الأول من الطريقة: