Tale: Publier un article, y compris "=", "&", entraînant l'échec de l'enregistrement

Créé le 18 déc. 2019  ·  6Commentaires  ·  Source: otale/tale

Après m'être connecté en arrière-plan, j'ai écrit un article. Comme certaines descriptions nécessitent du code, j'ai inséré des extraits de code.
Lorsque le résultat a été enregistré, il a été constaté qu'une erreur avait été signalée en arrière-plan.
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":
Voyant une erreur, j'ai d'abord pensé que la stratégie de sauvegarde consistait à mettre en cache en tant que fichier, et qu'il y avait une limitation sur la longueur des données, j'ai donc commencé à supprimer le texte et à déboguer. J'ai trouvé qu'il ne semble pas y avoir de fichiers temporaires générés. J'ai donc soupçonné que c'était une raison pour créer le fichier.

Selon l'erreur, trouvez la méthode sous-jacente io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.parseBodyAttributes()

Après avoir observé la méthode, j'ai découvert que netty lisait les données que je lui avais transmises, puis émettait des jugements un par un.

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;
}

J'ai remarqué que le commentaire dit d'interroger deux caractères "=" et "&". Avec un essai, mon article ne contient que "=", cliquez sur Enregistrer, et une erreur est signalée comme prévu :
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: 文件名、目录名或卷标语法不正确。
J'ai réessayé "&", et c'est ce que j'ai fait.

Je n'ai pas encore de solution spécifique, car l'erreur est une méthode privée de netty.

Commentaire le plus utile

J'ai trouvé une solution, https://juejin.im/post/5c63a028f265da2d9262c662

La méthode spécifique est,

  1. Créez un package sous src/main/java : io.netty.handler.codec.http.multipart

  2. Trouvez HttpPostStandardRequestDecoder.java partir du code source correspondant à netty-codec-http-4.1.30.Final.jar

  3. Copiez le code source dans le package créé à la première étape

  4. Recherchez parseBodyAttributes() et ajoutez le code suivant à la première ligne de la méthode :

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. Utilisez la commande de package maven pour packager le conte

Tous les 6 commentaires

J'ai trouvé une solution, https://juejin.im/post/5c63a028f265da2d9262c662

La méthode spécifique est,

  1. Créez un package sous src/main/java : io.netty.handler.codec.http.multipart

  2. Trouvez HttpPostStandardRequestDecoder.java partir du code source correspondant à netty-codec-http-4.1.30.Final.jar

  3. Copiez le code source dans le package créé à la première étape

  4. Recherchez parseBodyAttributes() et ajoutez le code suivant à la première ligne de la méthode :

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. Utilisez la commande de package maven pour packager le conte

Hmm, après une longue recherche, j'ai découvert que la couche inférieure de Blade signalait une erreur. Le cœur est brisé. Essayez d'abord votre méthode.Merci

Merci pour la méthode, mais en lisant le code, je n'ai pas compris le principe. .Exprimer son ignorance

Mettre à niveau la dépendance de Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

Mettre à niveau la dépendance de Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

J'ai essayé, ce qui signifie que le problème ne peut pas être résolu. . .

J'ai trouvé une solution, https://juejin.im/post/5c63a028f265da2d9262c662

La méthode spécifique est,

  1. Créez un package sous src/main/java : io.netty.handler.codec.http.multipart
  2. Trouvez HttpPostStandardRequestDecoder.java partir du code source correspondant à netty-codec-http-4.1.30.Final.jar
  3. Copiez le code source dans le package créé à la première étape
  4. Recherchez parseBodyAttributes() et ajoutez le code suivant à la première ligne de la méthode :
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. Utilisez la commande de package maven pour packager le conte
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}

Ce paramètre est en baisse ↓

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

Solution parfaite👍
A(G1% (QH{7~MTO)O438YC5
A(G1% (QH{7~MTO)O438YC5

Cette page vous a été utile?
0 / 5 - 0 notes