После входа в фоновый режим я написал статью.Поскольку некоторые описания требуют кода, я вставил фрагменты кода.
При сохранении результата было обнаружено, что в фоновом режиме была обнаружена ошибка.
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 считывает данные, которые я передал, а затем делает какие-то суждения одно за другим.
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;
}
Я заметил, что в комментарии говорится о запросе двух символов «=» и «&». При попытке, моя статья содержит только "=", нажмите "Сохранить", и выдается сообщение об ошибке, как и ожидалось:
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: 文件名、目录名或卷标语法不正确。
Я снова попробовал "&", и тоже.
У меня пока нет конкретного решения, потому что ошибка - это частный метод netty.
Нашел решение, https://juejin.im/post/5c63a028f265da2d9262c662
Конкретный метод:
Создайте пакет в src / main / java: io.netty.handler.codec.http.multipart
Найдите HttpPostStandardRequestDecoder.java
в исходном коде, соответствующем netty-codec-http-4.1.30.Final.jar
Скопируйте исходный код в пакет, созданный на первом шаге
Найдите parseBodyAttributes()
и добавьте следующий код в первую строку метода:
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
return;
}
Хм, после долгих поисков я обнаружил, что нижний слой Blade сообщил об ошибке. Сердце разбито. Сначала попробуйте свой метод.Благодарность
Спасибо за метод, но прочитав код, я не понял принципа. .Выражение незнания
Обновите зависимость Blade netty
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec</artifactId>
<version>4.1.31.Final</version>
</dependency>
Обновите зависимость Blade netty
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>
Пробовал, а значит проблема не решаемая. . .
Нашел решение, https://juejin.im/post/5c63a028f265da2d9262c662
Конкретный метод:
- Создайте пакет в src / main / java:
io.netty.handler.codec.http.multipart
- Найдите
HttpPostStandardRequestDecoder.java
в исходном коде, соответствующем netty-codec-http-4.1.30.Final.jar- Скопируйте исходный код в пакет, созданный на первом шаге
- Найдите
parseBodyAttributes()
и добавьте следующий код в первую строку метода:if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){ return; }
- Используйте команду пакета maven для упаковки сказки
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;
}
Идеальное решение👍
Самый полезный комментарий
Нашел решение, https://juejin.im/post/5c63a028f265da2d9262c662
Конкретный метод:
Создайте пакет в src / main / java:
io.netty.handler.codec.http.multipart
Найдите
HttpPostStandardRequestDecoder.java
в исходном коде, соответствующем netty-codec-http-4.1.30.Final.jarСкопируйте исходный код в пакет, созданный на первом шаге
Найдите
parseBodyAttributes()
и добавьте следующий код в первую строку метода: