Setelah masuk ke latar belakang, saya menulis artikel. Karena beberapa deskripsi memerlukan kode, saya memasukkan potongan kode.
Ketika hasilnya disimpan, ditemukan bahwa kesalahan dilaporkan di latar belakang.
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":
Melihat kesalahan, saya awalnya berpikir bahwa strategi untuk menyimpan adalah menyimpan sebagai file, dan ada batasan panjang data, jadi saya mulai menghapus teks dan debug. Saya menemukan bahwa sepertinya tidak ada file sementara yang dihasilkan. Jadi saya curiga ada alasan untuk membuat file.
Menurut kesalahan, temukan metode yang mendasarinya io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.parseBodyAttributes()
Setelah mengamati metodenya, saya menemukan bahwa netty sedang membaca data yang saya berikan, dan kemudian membuat semacam penilaian satu per satu.
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;
}
Saya perhatikan bahwa komentar mengatakan untuk menanyakan dua karakter "=" dan "&". Dengan mencoba, artikel saya hanya berisi "=", klik simpan, dan kesalahan dilaporkan seperti yang diharapkan:
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: 文件名、目录名或卷标语法不正确。
Saya mencoba "&" lagi, dan begitu juga.
Saya belum memiliki solusi khusus, karena kesalahannya adalah metode pribadi netty.
Menemukan solusi, https://juejin.im/post/5c63a028f265da2d9262c662
Metode khusus adalah,
Buat paket di bawah src/main/Java: io.netty.handler.codec.http.multipart
Temukan HttpPostStandardRequestDecoder.java
dari kode sumber yang sesuai dengan netty-codec-http-4.1.30.Final.jar
Salin kode sumber ke paket yang dibuat pada langkah pertama
Temukan parseBodyAttributes()
, dan tambahkan kode berikut ke baris pertama metode:
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
return;
}
Hmm, setelah lama mencari, saya menemukan bahwa lapisan bawah Blade melaporkan kesalahan. Hati hancur. Cobalah metode Anda terlebih dahulu.Terima kasih
Terima kasih atas metodenya, tetapi dengan membaca kodenya, saya tidak mengerti prinsipnya. .Mengekspresikan ketidaktahuan
Tingkatkan ketergantungan Blade netty
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec</artifactId>
<version>4.1.31.Final</version>
</dependency>
Tingkatkan ketergantungan Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>
Mencobanya, yang berarti bahwa masalahnya tidak dapat diselesaikan. . .
Menemukan solusi, https://juejin.im/post/5c63a028f265da2d9262c662
Metode khusus adalah,
- Buat paket di bawah src/main/Java:
io.netty.handler.codec.http.multipart
- Temukan
HttpPostStandardRequestDecoder.java
dari kode sumber yang sesuai dengan netty-codec-http-4.1.30.Final.jar- Salin kode sumber ke paket yang dibuat pada langkah pertama
- Temukan
parseBodyAttributes()
, dan tambahkan kode berikut ke baris pertama metode:if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){ return; }
- Gunakan perintah paket maven untuk mengemas kisah
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
return;
}
Parameter ini turun
if(!this.request.headers().get("Content-Type").startsWith("application/x-www-form-urlencoded")){
return;
}
Solusi sempurna👍
Komentar yang paling membantu
Menemukan solusi, https://juejin.im/post/5c63a028f265da2d9262c662
Metode khusus adalah,
Buat paket di bawah src/main/Java:
io.netty.handler.codec.http.multipart
Temukan
HttpPostStandardRequestDecoder.java
dari kode sumber yang sesuai dengan netty-codec-http-4.1.30.Final.jarSalin kode sumber ke paket yang dibuat pada langkah pertama
Temukan
parseBodyAttributes()
, dan tambahkan kode berikut ke baris pertama metode: