2010-10-08 2 views
0

Здравствуйте еще раз я задать вопрос на StackOverflow: DКак загрузить изображение в JSF

Как я могу загрузить файл с помощью JSF primefaces? у меня есть метод ручки Загрузить изображение

public void handleFileUpload(FileUploadEvent event) { 
         ExternalContext extContext = FacesContext.getCurrentInstance(). 
              getExternalContext(); 
       File result = new File(extContext.getRealPath 
       ("//admin//item") + "//" + event.getFile().getFileName()); 

      try { 
       FileOutputStream fileOutputStream = new FileOutputStream(result); 

       byte[] buffer = new byte[BUFFER_SIZE]; 

       int bulk; 
       InputStream inputStream = event.getFile().getInputstream(); 
       while (true) { 
        bulk = inputStream.read(buffer); 
        if (bulk < 0) { 
         break; 
         } 
        fileOutputStream.write(buffer, 0, bulk); 
        fileOutputStream.flush(); 
        } 

        fileOutputStream.close(); 
        inputStream.close(); 

        FacesMessage msg = new FacesMessage("Succesful", 
         event.getFile().getFileName() + " is uploaded."); 
        FacesContext.getCurrentInstance().addMessage(null, msg); 

        } catch (IOException e) { 
         e.printStackTrace(); 

        FacesMessage error = new FacesMessage("The files were not uploaded!"); 
        FacesContext.getCurrentInstance().addMessage(null, error); 
        } 
     } 

он работает хорошо, но это только работает, когда сервер развертывания, когда я загрузить файл на сервер, папку // админ/элемент/есть изображение, но когда я повторно запустить сервер я могу «т найти изображение я был загружен

и как я могу отобразить эскизы для каждого элемента с каждым собственным изображением

ответ

2

но когда я рестарт сервера я не могу найти файл я был загружен

Это нормально в большинстве конфигураций servletcontainer. Когда вы перезагружаете сервер или повторно развертываете webapp, все ранее расширенные файлы webapp будут удалены, и WAR будет повторно расширена. Вы не должны хранить загруженные файлы в расширенной папке для случая, когда вы хотите сохранить их дольше, чем живет контекст webapp.

Обычная практика заключается в том, чтобы хранить их по фиксированному пути вне контекста webapp, например. /var/webapp/upload.

File file = new File("/var/webapp/upload", event.getFile().getFileName()); 

Unrelated к проблеме, я бы предложил использовать File#createTempFile(), чтобы избежать, что другой загруженный файл, который имеет -по coincidence- такое же имя файла будет перезаписывать все ранее загруженные один.

+0

СПАСИБО ВАС ОЧЕНЬ МНОГО, но как я могу отображать миниатюру? Я использую 'h: graphicImage value" var/webapp/upload/# {getName} "id =" thumb "' и повторно его рендерить, он не работает, но с h: inputText я могу получить имя изображения, пожалуйста, помогите мне ! thank – MYE

+1

Либо отобразите его как другой контекст webapp, чтобы он был доступен, например, http://example.com/upload или использовать сервлет, который передает байты с диска на ответ. – BalusC

+0

См. Также мой ответ на [этот вопрос] (http://stackoverflow.com/questions/3723718/what-is-the-correct-path-i-need-to-see-my-uploaded-image) для более подробной информации на любом из подходов. – BalusC

-1

вы можете обратиться к this link, который содержит образец кода для fileUpload в . Поверхности.

Смежные вопросы