2013-04-24 3 views
0

Привет, я пытаюсь загрузить файл с помощью java-файла .. но я не понимаю .. Я получаю размер файла = 0 Я предоставляю здесь свой код Java. скажите мне, почему я не могу загрузить в определенную папку. Я хочу сохранить файл в определенной папке. Я пытаюсь получить размер файла, имя файла, но я получил нулевое значение, где я ошибаюсь, скажите мне.Как загрузить файл с помощью java?

public void updateTesti(ActionRequest actionRequest,ActionResponse actionResponse) throws IOException, PortletException 
{ 
    //image upload logic 
    String folder_for_upload =(getPortletContext().getRealPath("/")); 
    //String folder=actionRequest.getParameter("uploadfolder"); 
    realPath=getPortletContext().getRealPath("/"); 

    logger.info("RealPath is" + realPath); 
    logger.info("Folder is :" + folder_for_upload); 
    try 
    { 
     logger.info("Admin is try to upload"); 

     UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest); 

     if (uploadRequest.getSize("fileName") == 0) { 
      SessionErrors.add(actionRequest, "error"); 
     } 
     String sourceFileName = uploadRequest.getFileName("fileName"); 
     File uploadedFile = uploadRequest.getFile("fileName"); 
     System.out.println("Size of uploaded file: " + uploadRequest.getSize("fileName")); 

     logger.info("Uploded file name is: " + uploadRequest.getFileName("fileName"));     
     String destiFolder=("/home/ubuntu/liferay/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/webapps/imageUpload-portlet/image"); 
     String newsourcefilename = (uploadRequest.getFileName("fileName")); 
     File newFile = new File(destiFolder +"/"+ newsourcefilename); 

     logger.info("New file name: " + newFile.getName()); 
     logger.info("New file path: " + newFile.getPath()); 

     InputStream in = new BufferedInputStream(uploadRequest.getFileAsStream("fileName")); 

     FileInputStream fis = new FileInputStream(uploadedFile); 
     FileOutputStream fos = new FileOutputStream(newFile); 
     byte[] bytes_ = FileUtil.getBytes(in); 
     int i = fis.read(bytes_); 
     while (i != -1) { 
      fos.write(bytes_, 0, i); 
      i = fis.read(bytes_); 
     } 
     fis.close(); 
     fos.close(); 
     Float size = (float) newFile.length(); 

     System.out.println("file size bytes:" + size); 
     System.out.println("file size Mb:" + size/1048576); 

     logger.info("File created: " + newFile.getName()); 
     SessionMessages.add(actionRequest, "success"); 

    } 
    catch (FileNotFoundException e) 
    { 
     System.out.println("File Not Found."); 
     e.printStackTrace(); 
     SessionMessages.add(actionRequest, "error"); 
    } 
    catch (NullPointerException e) 
    { 
     System.out.println("File Not Found"); 
     e.printStackTrace(); 
     SessionMessages.add(actionRequest, "error"); 
    } 
    catch (IOException e1) 
    { 
     System.out.println("Error Reading The File."); 
     SessionMessages.add(actionRequest, "error"); 
     e1.printStackTrace(); 
    } 
} 
+0

Я вижу, что вы отметили это как «liferay». Я предполагаю, что это портлет? Можете ли вы предоставить вывод всех операторов System.out.println()? – CodeChimp

+0

Можете ли вы предоставить код jsp –

+0

Одинаковая проблема здесь. Я предполагаю, что это имеет какое-то отношение к имени файла.Я дам вам знать, найду ли что-нибудь. –

ответ

-1

Я прошел через код загрузки файла, и когда я осуществить это в моей локальной системе, что я получил, это, портлет сохранить файл я загрузить в tomcat/webbapp/abc_portlet_project месте, что я не понимаю, откуда портлет нашел

String folder = getInitParameter ("uploadFolder");

   String realPath = getPortletContext().getRealPath("/"); 

       System.out.println("RealPath" + realPath +"\\" + folder); try { 

UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest (ActionRequest); System.out.println ("Размер:" + uploadRequest.getSize ("fileName"));

, если (uploadRequest.getSize ("имя_файла") == 0) { SessionErrors.add (ActionRequest, "Ошибка");}

Строка sourceFileName = uploadRequest.getFileName ("имя_файла"); Файл file = uploadRequest.getFile ("fileName");

System.out.println ("Nome file:" + uploadRequest.getFileName ("fileName")); Файл newFolder = null; newFolder = новый файл (папка realPath + "\" +); if (! NewFolder.exists()) {newFolder.mkdir(); } Файл newfile = null; newfile = new Файл (newFolder.getAbsoluteFile() + "\" + sourceFileName); System.out.println ("Новое имя файла:" + newfile.getName()); System.out.println («Новый путь к файлу:» + newfile.getPath());

InputStream in = new BufferedInputStream (uploadRequest.getFileAsStream ("fileName")); FileInputStream fis = new FileInputStream (файл); FileOutputStream fos = новый FileOutputStream (newfile);

+0

Я не вижу никакого ответа здесь, может быть, вы хотели бы отредактировать этот пост? –

0

Я выполнил ваш код. Он работает в соответствии с ожиданием. Возможно, что-то не так на вашей странице jsp. Я не уверен, но может быть ваш атрибут имени не такой, как тот, который вы используете в processAction (предполагается, что вы используете портлет). Параметр чувствителен к регистру, поэтому проверьте его снова.

Вы найдете более подробную информацию по ссылке ниже. Имеет хорошее объяснение при загрузке файла.

http://www.codeyouneed.com/liferay-portlet-file-upload-tutorial/

1

Вы должны сделать это, чтобы загрузить небольшие файлы < 1kb

File f2 = uploadRequest.getFile("fileupload", true); 

Они хранятся в памяти только. У меня есть это в моей инструкции catch, я получаю нулевой указатель - или выставляю мой исходный файл (f1.length) == 0

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