バックグラウンドでログインした後、記事を書きました。一部の説明にはコードが必要なため、コードスニペットを挿入しました。
結果を保存すると、バックグラウンドでエラーが報告されていることがわかりました。
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が渡したデータを読み取って、1つずつ何らかの判断を下していることがわかりました。
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;
}
コメントが2文字の「=」と「&」をクエリするように言っていることに気づきました。試してみると、私の記事には「=」しか含まれておらず、[保存]をクリックすると、期待どおりにエラーが報告されます。
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: 文件名、目录名或卷标语法不正确。
もう一度「&」を試してみました。
エラーはnettyのプライベートメソッドであるため、具体的な解決策はまだありません。
解決策が見つかりました、 https://juejin.im/post/5c63a028f265da2d9262c662
具体的な方法は、
src / main / javaの下にパッケージを作成します: io.netty.handler.codec.http.multipart
netty-codec-http-4.1.30.Final.jarに対応するソースコードからHttpPostStandardRequestDecoder.java
を見つけます
最初のステップで作成したパッケージにソースコードをコピーします
parseBodyAttributes()
を見つけて、メソッドの最初の行に次のコードを追加します。
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
return;
}
うーん、長い間検索したところ、Bladeの最下層がエラーを報告していることがわかりました。心が壊れています。最初にあなたの方法を試してください。ありがとう
方法はありがとうございましたが、コードを読んでも原理がわかりませんでした。 。無知を表現する
Bladenettyの依存関係をアップグレードする<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec</artifactId>
<version>4.1.31.Final</version>
</dependency>
Bladenettyの依存関係をアップグレードする
<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
- netty-codec-http-4.1.30.Final.jarに対応するソースコードから
HttpPostStandardRequestDecoder.java
を見つけます- 最初のステップで作成したパッケージにソースコードをコピーします
parseBodyAttributes()
を見つけて、メソッドの最初の行に次のコードを追加します。if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){ return; }
- mavenパッケージコマンドを使用してtaleをパッケージ化します
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
netty-codec-http-4.1.30.Final.jarに対応するソースコードから
HttpPostStandardRequestDecoder.java
を見つけます最初のステップで作成したパッケージにソースコードをコピーします
parseBodyAttributes()
を見つけて、メソッドの最初の行に次のコードを追加します。