Nano Hash - криптовалюты, майнинг, программирование

javax.servlet.http.Part не передается на сервер с помощью ‹h:inputFile›

Я пытаюсь использовать новый JSF 2.2, чтобы пользователь мог загрузить фотографию в свой профиль. В любом случае мне нужно поведение Ajax, которого я добился с помощью следующего фрагмента:

<h:form enctype="multipart/form-data">
    <h:inputFile value="#{usuarioController.part}">
        <f:ajax listener="#{usuarioController.uploadImage}"/>
    </h:inputFile>
</h:form>

Но на данный момент моя public void uploadImage() часть javax.servlet.http.Part все еще недействительна..

Это контроллер:

@Named(value="usuarioController")
@SessionScoped
public class UsuarioController extends GenericPersonificacaoCrudController<Usuario>{
    private static final long serialVersionUID = 3233882970467365819L;
    private Part part;

    public void uploadImage(){
        System.out.println(part);
    }

    public Part getPart() {
        return part;
    }

    public void setPart(Part part) {
        this.part = part;
    }
}

Я использую реализацию JSF Mojarra 2.2.6 с Tomcat + Weld CDI и Primefaces 5.1, что не имеет отношения к вопросу, поскольку я использую собственный компонент fileUpload, но я включаю только для того, чтобы вы знали, что я также пытался использовать его, и он не работаю с mode="advanced", которые используют ajax, что заставляет меня задуматься, не является ли это какой-то несовместимостью или конфликтом библиотек, которые я использую.

20.11.2014


Ответы:


1

Вы пытаетесь получить доступ к файлу, используя java-представление компонента <h:inputFile/>; Вы не должны этого делать. Как у вас есть, file должен быть привязан к экземпляру javax.servlet.http.Part, из которого вы можете получить InputStream. Остальное довольно просто с этой точки зрения. Ваш код будет выглядеть примерно так:

public Part file;
//getter and setter

public void uploadImagem(){

    long fileSize = file.getSize();
    byte[] fileStorage = new byte[fileSize];
    BufferedInputStream bis = new BufferedInputStream(file.getInputStream);
    bis.read(fileStorage);

    //do whatever you want with the array.

}

Совет. Вы также должны знать, что Part также имеет удобный метод write(), который позволяет вам напрямую записывать файл в указанный каталог

21.11.2014
  • Спасибо за ответ. В любом случае мой файл, который является экземпляром javax.servlet.http.Part, является нулевым в момент запуска моего метода uploadImagem. Любая подсказка? Еще раз спасибо @kolossus 21.11.2014
  • Где окружающие <h:form/> @MarcosJ.CKichel ? Опубликовать здесь 21.11.2014
  • Это в шаблоне, и да, я поместил в него атрибут enctype=multipart/form-data, я также переопределил весь шаблон для тестирования, и он все еще не работает. Я использую mojarra 2.2.6 с tomcat 8. @kolossus 21.11.2014
  • ‹ui:define name=conteudoTabCadastro› ‹h:form enctype=multipart/form-data› ‹h:inputFile value=#{controller.part}› ‹f:ajax listener=#{controller.uploadImagemNoAjax}/› ‹/h :inputFile› ‹/h:form› ‹/ui:define› @kolossus 21.11.2014
  • Вам нужно будет обновить свой вопрос с достаточным количеством примера кода, чтобы попытаться воспроизвести проблему @MarcosJ.CKichel . Также загляните в свою консоль javascript, чтобы убедиться, что часть передается из вашего браузера. 21.11.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..