Tale: Posten Sie einen Artikel, der "=", "&" enthält, was dazu führt, dass das Speichern fehlschlägt

Erstellt am 18. Dez. 2019  ·  6Kommentare  ·  Quelle: otale/tale

Nachdem ich mich im Hintergrund eingeloggt habe, habe ich einen Artikel geschrieben und als Teil der Beschreibung erfordert Code ein Code-Snippet eingefügt.
Beim Speichern des Ergebnisses wurde festgestellt, dass im Hintergrund ein Fehler gemeldet wurde.
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":
Als ich einen Fehler sah, dachte ich zunächst, dass die Strategie zum Speichern darin besteht, als Datei zwischenzuspeichern, und es gibt eine Beschränkung der Datenlänge, also begann ich, den Text zu löschen und zu debuggen. Ich habe festgestellt, dass keine temporären Dateien generiert werden. Also vermutete ich, dass es ein Grund war, die Datei zu erstellen.

Suchen Sie gemäß dem Fehler die zugrunde liegende Methode io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.parseBodyAttributes()

Nachdem ich die Methode beobachtet hatte, stellte ich fest, dass Netty die von mir eingegebenen Daten las und dann Zeichen für Zeichen einige Urteile traf.

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

Mir ist aufgefallen, dass der Kommentar besagt, dass zwei Zeichen "=" und "&" abgefragt werden sollen. Bei einem Versuch enthält mein Artikel nur "=", klicken Sie auf Speichern und wie erwartet wird ein Fehler gemeldet:
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: 文件名、目录名或卷标语法不正确。
Ich habe es noch einmal mit "&" versucht und auch.

Ich habe derzeit keine spezifische Lösung, da dieser Fehler eine private Methode von netty ist.

Hilfreichster Kommentar

Lösung gefunden, https://juejin.im/post/5c63a028f265da2d9262c662

Die konkrete Methode ist,

  1. Erstellen Sie ein Paket unter src/main/java: io.netty.handler.codec.http.multipart

  2. Suchen Sie HttpPostStandardRequestDecoder.java aus dem Quellcode, der netty-codec-http-4.1.30.Final.jar entspricht

  3. Kopieren Sie den Quellcode in das im ersten Schritt erstellte Paket

  4. Suchen Sie parseBodyAttributes() und fügen Sie den folgenden Code in die erste Zeile der Methode ein:

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. Verwenden Sie den Maven-Paketbefehl, um tale . zu verpacken

Alle 6 Kommentare

Lösung gefunden, https://juejin.im/post/5c63a028f265da2d9262c662

Die konkrete Methode ist,

  1. Erstellen Sie ein Paket unter src/main/java: io.netty.handler.codec.http.multipart

  2. Suchen Sie HttpPostStandardRequestDecoder.java aus dem Quellcode, der netty-codec-http-4.1.30.Final.jar entspricht

  3. Kopieren Sie den Quellcode in das im ersten Schritt erstellte Paket

  4. Suchen Sie parseBodyAttributes() und fügen Sie den folgenden Code in die erste Zeile der Methode ein:

if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. Verwenden Sie den Maven-Paketbefehl, um tale . zu verpacken

Hmm, nach langem Suchen habe ich festgestellt, dass die unterste Schicht von Blade einen Fehler gemeldet hat. Das Herz ist gebrochen. Probieren Sie zuerst Ihre Methode aus.Danke

Danke für die Methode, aber beim Lesen des Codes habe ich das Prinzip nicht verstanden. .Unwissenheit ausdrücken

Aktualisieren Sie die Abhängigkeit von Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

Aktualisieren Sie die Abhängigkeit von Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>

Habe es probiert, was bedeutet, dass das Problem nicht gelöst werden kann. . .

Lösung gefunden, https://juejin.im/post/5c63a028f265da2d9262c662

Die konkrete Methode ist,

  1. Erstellen Sie ein Paket unter src/main/java: io.netty.handler.codec.http.multipart
  2. Suchen Sie HttpPostStandardRequestDecoder.java aus dem Quellcode, der netty-codec-http-4.1.30.Final.jar entspricht
  3. Kopieren Sie den Quellcode in das im ersten Schritt erstellte Paket
  4. Suchen Sie parseBodyAttributes() und fügen Sie den folgenden Code in die erste Zeile der Methode ein:
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}
  1. Verwenden Sie den Maven-Paketbefehl, um tale . zu verpacken
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
          return;
}

Dieser Parameter ist unten ↓

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

Perfekte Lösung👍
A(G1% (QH{7~MTO)O438YC5
A(G1% (QH{7~MTO)O438YC5

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen