0

登録フォームにユーザー画像をアップロードしています。画像フォルダーに保存したいです。アプリケーションは絶対パスを指定しても動作しますが、相対パスを指定する方法はありません。ここに私のコードがあります。//マルチパートコンテンツかどうかをチェック* // if (!ServletFileUpload.isMultipartContent(request)) //if1

     {
           request.setAttribute("error", "No file is selected for upload");
           rd=request.getRequestDispatcher("error.jsp");       //dispatching to error page if no file is sent via request
           rd.forward(request,response);

        }  //end of if1


     //****Setting space and path where file will be uploaded on server*****//
     DiskFileItemFactory factory = new DiskFileItemFactory();    //object of class defined in commons package
     factory.setSizeThreshold(THRESHOLD_SIZE);
     factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
     ServletFileUpload upload = new ServletFileUpload(factory);
     upload.setFileSizeMax(MAX_FILE_SIZE);
     upload.setSizeMax(REQUEST_SIZE);
      String uploadPath = "c://"+ File.separator + UPLOAD_DIRECTORY;
       // creates the directory if it does not exist
      File uploadDir = new File(uploadPath);
      userbean.setUserimage(uploadPath);
          if (!uploadDir.exists())//if2
          {
                uploadDir.mkdir();

            }  //end of if2





          //*******check the type of form and process accordingly*****//

            try 
              {                //try1

                List formItems = upload.parseRequest(request);// parses the request's content to extract file data
                Iterator iter = formItems.iterator();        

                //******* iterates over form's fields**********//

                while (iter.hasNext()) //while1
                {
                    FileItem item = (FileItem) iter.next();



       // ********processes only fields that are not form fields*******//
                    if (!item.isFormField()) //if3
                    {
                        String fileName = new File(item.getName()).getName();
                        String filePath = uploadPath + File.separator + fileName;
                        File storeFile = new File(filePath);

                        // saves the file on disk
                        item.write(storeFile);
                        fileuploaded=true;

                    }//end of if3
4

1 に答える 1

1

Java EE アプリケーションで相対パスを使用するのは簡単ではありません。これは、IDE のルート フォルダを参照する場合があり、すべての JSP ファイルが IDE または Tomcat の作業ディレクトリ内の Java ファイルにコンパイルされるため、そのパスを次のように使用する場合があるためです。相対パス。

Eclipse でコーディングしていたときに、同じ問題に直面しました。

この問題の解決策は、コンテキスト パラメーター (または) init-parameters のいずれかとして web.xml に絶対パスをコーディングすることです。これは、将来ディレクトリを変更する場合に 1 か所の変更になります。

于 2013-03-13T12:33:08.820 に答える