Загрузка MultipartFormDataInput с именем файла, отличным от ASCII. КваркусJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Загрузка MultipartFormDataInput с именем файла, отличным от ASCII. Кваркус

Сообщение Anonymous »

Я столкнулся с некоторыми трудностями при загрузке файла с именем, отличным от ASCII.
Часть кода:
package org.example;

import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;

@Path("/hello")
public class ExampleResource {

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void hello(@MultipartForm MultipartFormDataInput formDataInput) {
Map dataMap = formDataInput.getFormDataMap();
List inputs = dataMap.get("attachment");
System.out.println("Data map: " + dataMap);
System.out.println("Data inputs: " + inputs);
}
}

Шаг воспроизведения:
  • Создайте оба файла с разными именами и одним расширением для сравнения: Новый_документ. docx и New_document.docx.
  • Как только оба будут созданы, попробуйте загрузить их с помощью почтальона с вложением key
Изображение
  • Отладьте данные и посмотрите, что formDataInput.getFormDataMap () метод dataMap возвращает действительно странный ключ, закодированный с помощью UTF-8, и он обрезан, потому что у него есть .doc вместо .docx. Я предполагаю, что ключом карты является значение filename*=UTF-8, взятое из заголовка Content-Disposition.
Content-Disposition: form-data; name="attachment"; filename="Новый_документ.docx"; filename*=UTF-8''%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82.docx

Изображение

Inputs имеет значение null.
Изображение
  • Проделайте то же самое с именем файла ASCII New_document.docx. И обратите внимание на ту же карту. На данный момент ожидаемый ключ и входные данные не равны нулю
Изображение
[img]https://i.sstatic.net. /nSv9qE2P.png[/img]

Итак, моя проблема: когда я пытаюсь загрузить любой файл с именем файла, отличным от ASCII, я не могу получить ключ вложения из formDataInput. результат метода getFormDataMap().
Я попробовал использовать несколько подходов для ее решения:
  • Было добавлено

    @Consumes(MediaType.MULTIPART_FORM_DATA + ";charset=utf-8")

    вместо
    @Consumes(MediaType.MULTIPART_FORM_DATA)
  • Добавлена ​​реализация ContainerRequestFilter:
package org.example;

import static org.jboss.resteasy.plugins.providers.multipart.InputPart.DEFAULT_CHARSET_PROPERTY;
import static org.jboss.resteasy.plugins.providers.multipart.InputPart.DEFAULT_CONTENT_TYPE_PROPERTY;

import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerRequestFilter;
import jakarta.ws.rs.ext.Provider;
import java.io.IOException;

@Provider
public class ContainerRequestFilterImpl implements ContainerRequestFilter {

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
requestContext.setProperty(DEFAULT_CONTENT_TYPE_PROPERTY, "multipart/form-data;charset=utf-8");
requestContext.setProperty(DEFAULT_CHARSET_PROPERTY, "utf-8");
}
}

Я понятия не имею, что я сделал не так и как это исправить.
Использовано:
io.quarkus:quarkus-bom:3.13.0
org.jboss.resteasy:resteasy-multipart-provider:6.2.9.Final


Подробнее здесь: https://stackoverflow.com/questions/788 ... me-quarkus
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Hadoop: запуск Datanodes с именем пользователя, отличным от Namenode, неверный путь к команде Datanode hdfs
    Anonymous » » в форуме Linux
    0 Ответы
    73 Просмотры
    Последнее сообщение Anonymous
  • Преобразование расширенного Ascii (>127) в стандартный Ascii (<128) в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    79 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать символ ASCII в его значение ASCII int?
    Anonymous » » в форуме C++
    0 Ответы
    84 Просмотры
    Последнее сообщение Anonymous
  • ASCII Art — сортировка массива символов ASCII по уровням яркости (C/C++)
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Кваркус СтройШаг
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»