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.
J'ai trouvé une solution, https://juejin.im/post/5c63a028f265da2d9262c662
La méthode spécifique est,
Créez un package sous src/main/java : io.netty.handler.codec.http.multipart
Trouvez HttpPostStandardRequestDecoder.java
partir du code source correspondant à netty-codec-http-4.1.30.Final.jar
Copiez le code source dans le package créé à la première étape
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;
}
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,
- Créez un package sous src/main/java :
io.netty.handler.codec.http.multipart
- Trouvez
HttpPostStandardRequestDecoder.java
partir du code source correspondant à netty-codec-http-4.1.30.Final.jar- Copiez le code source dans le package créé à la première étape
- 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; }
- 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👍
Commentaire le plus utile
J'ai trouvé une solution, https://juejin.im/post/5c63a028f265da2d9262c662
La méthode spécifique est,
Créez un package sous src/main/java :
io.netty.handler.codec.http.multipart
Trouvez
HttpPostStandardRequestDecoder.java
partir du code source correspondant à netty-codec-http-4.1.30.Final.jarCopiez le code source dans le package créé à la première étape
Recherchez
parseBodyAttributes()
et ajoutez le code suivant à la première ligne de la méthode :