Tale: 「=」、「&」を含む記事を投稿すると、保存に失敗します

作成日 2019年12月18日  ·  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が渡したデータを読み取って、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

具体的な方法は、

  1. src / main / javaの下にパッケージを作成します: io.netty.handler.codec.http.multipart

  2. netty-codec-http-4.1.30.Final.jarに対応するソースコードからHttpPostStandardRequestDecoder.javaを見つけます

  3. 最初のステップで作成したパッケージにソースコードをコピーします

  4. parseBodyAttributes()を見つけて、メソッドの最初の行に次のコードを追加します。

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. mavenパッケージコマンドを使用してtaleをパッケージ化します

全てのコメント6件

解決策が見つかりました、 https://juejin.im/post/5c63a028f265da2d9262c662

具体的な方法は、

  1. src / main / javaの下にパッケージを作成します: io.netty.handler.codec.http.multipart

  2. netty-codec-http-4.1.30.Final.jarに対応するソースコードからHttpPostStandardRequestDecoder.javaを見つけます

  3. 最初のステップで作成したパッケージにソースコードをコピーします

  4. parseBodyAttributes()を見つけて、メソッドの最初の行に次のコードを追加します。

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. mavenパッケージコマンドを使用してtaleをパッケージ化します

うーん、長い間検索したところ、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

具体的な方法は、

  1. src / main / javaの下にパッケージを作成します: io.netty.handler.codec.http.multipart
  2. netty-codec-http-4.1.30.Final.jarに対応するソースコードからHttpPostStandardRequestDecoder.javaを見つけます
  3. 最初のステップで作成したパッケージにソースコードをコピーします
  4. parseBodyAttributes()を見つけて、メソッドの最初の行に次のコードを追加します。
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. 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;
 }

完璧な解決策👍
A(G1% (QH{7~MTO)O438YC5
A(G1% (QH{7~MTO)O438YC5

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

biezhi picture biezhi  ·  3コメント

mengziqiang picture mengziqiang  ·  8コメント

gqb picture gqb  ·  7コメント

pkwenda picture pkwenda  ·  53コメント

panjf2000 picture panjf2000  ·  5コメント