2015-11-13 2 views
1

Я пытаюсь реализовать процесс загрузки файлов в своем веб-приложении с помощью перехватчика struts2 fileUpload. ниже мой код вStruts2 Fileupload, дающий нулевой файл в классе действий

index.jsp

<tags:form action="fileUpload" method="post" enctype="multipart/form-data"> 
    <tags:file name="fileUpload" label="Choose File"/> 
    <tags:submit value="Upload"/>  
</tags:form> 

struts.xml

<action name="fileUpload" class="com.hibernate.action.FileUploadAction"> 
    <interceptor-ref name="fileUploadStack"/> 
    <interceptor-ref name="fileUpload"> 
     <param name="maximumSize">1024000</param> 
     <param name="allowedTypes">application/pdf</param> 
    </interceptor-ref> 
    <result name="success">/viewChapters.jsp</result> 
</action> 

FileUploadAction.java

public class FileUploadAction extends ActionSupport 
{ 
private File fileUpload; 
private String contentType; 
private String fileName; 
private String destPath; 
/// setter and getter methods 
public String execute() 
{ 
    destPath="C:\\WebPortal_testing"; 
    try 
    { 
     System.out.println("Source File Name:"+fileUpload); 
     System.out.println("Destination File Name:"+fileName); 

     File destFile= new File(destPath,fileName); 
     FileUtils.copyFile(fileUpload, destFile); 
    } 
    catch(IOException exception) 
    { 
     exception.printStackTrace(); 
     return ERROR; 
    } 
    return SUCCESS; 
} 

при выборе файла в формате PDF в index.jsp страницы и нажмите кнопку «Загрузить», она дает пустое значение в поле fileUpload класса действия.

Я выполнение приложения в режиме отладки и дал это

System.out.println("Source File Name:"+fileUpload); 

, чтобы проверить, что она возвращается, и я получаю пустой.

ответ

2

1. Конфигурация перехватчик неправильно

FileUploadStack является:

<!-- Sample file upload stack --> 
<interceptor-stack name="fileUploadStack"> 
    <interceptor-ref name="fileUpload"/> 
    <interceptor-ref name="basicStack"/> 
</interceptor-stack> 

то, что вы на самом деле определяющим является:

<interceptor-ref name="fileUpload"/> 
    <interceptor-ref name="basicStack"/> 
    <interceptor-ref name="fileUpload"> 
     <param name="maximumSize">1024000</param> 
     <param name="allowedTypes">application/pdf</param> 
    </interceptor-ref> 

Использование

  • два раза FileUpload перехватчики
  • применения ваших ограничений на MaximumSize и allowedTypes только на секунду.

Вобще

<interceptor-ref name="fileUploadStack"> 
    <param name="fileUpload.maximumSize">1024000</param> 
    <param name="fileUpload.allowedTypes">application/pdf</param> 
</interceptor-ref> 

2. Атрибуты файла неверны

Тип содержимого и имя файла атрибуты должны начинаться с файла имя атрибута.

В вашем случае:

private File fileUpload; 
private String fileUploadContentType; 
private String fileUploadFileName; 

Вы можете найти полный пример на this question.


3. Вы печатаете файл вместо файла

System.out.println("Source File Name:"+fileUpload); 

То есть файл, а не имя файла, и кстати имя файла передается в другой переменной.


Исправить это и повторить попытку. Также обратите внимание, что небезопасно использовать <tags: в качестве префикса, когда весь мир использует <s:. В этом нет никакой выгоды, только осложнения. Просто используйте <s:.

+0

Спасибо за ваш ответ. относительно вашего 3. Вы печатаете файл вместо имени файла Я использую это только для целей тестирования. Я обновил каждую вещь в соответствии с вашими предложениями, но не повезло. Я все еще получаю ту же проблему. –

+0

Затем тщательно проверьте сеттеры или опубликуйте более подробную информацию, потому что теперь все выглядит нормально –

+0

Работало ли оно @GhostRider? –