2017-08-28 20 views
0

私は以下のコードを使用してファイルをサーバーにアップロードしています。それは適切ですか?コード内のパス "d:/ new"は、サーバーパスまたはクライアントPCパスです。どこでもクライアントのPCパスを指定する必要がありますか。または、参照ボタンをクリックしてファイルを選択している間、直接パスを取得しますか?ファイルをサーバーにアップロードする以外の方法がありますか?サーバーにファイル(Excel)をアップロードする

index.htmlを

<html> 
    <body> 
<form class="form-group" action="go" method="post" enctype="multipart/form-data"> 
              <% 

               Connection connection = null; 
               Statement statement = null; 
               String error = ""; 

               try { 
                Class.forName("com.mysql.jdbc.Driver").newInstance(); 
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lms_data", "root", ""); 
                statement = connection.createStatement(); 
                ResultSet resultset = statement.executeQuery("select * from assessment_type"); 
                connection.setAutoCommit(false); 
              %> 


              <label>Assessment Type</label> 
              <select class="form-control" name="assessment_type_id"> 
               <% while (resultset.next()) {%> 
               <option value="<%= resultset.getString(1)%>"><%= resultset.getString(2)%></option> 

               <% } %> 
              </select> 

              <% 
              ResultSet resultset_cat_id = statement.executeQuery("select * from course_category"); 
              %> 
              <br/><label>Category Name</label> 
              <select class="form-control" name="category_id"> 
               <% while (resultset_cat_id.next()) {%> 
               <option value="<%= resultset_cat_id.getString(1)%>"><%= resultset_cat_id.getString(2)%></option> 

               <% } %> 
              </select> 
              <% 
               } catch (Exception e) { 
                if (!connection.isClosed()) { 
                 connection.close(); 
                } 
                out.println(e); 
                e.printStackTrace(); 
               } 
              %> 
              <label class="control-label">Select File</label> 
              <input type="file" name="file" id="file"><br/> 


              <input type="submit" name="submitform" class="btn btn-primary" value="Submit" style="width:20%;border-radius:0px;"><br/><br/> 



             </form> 
    </body> 
    </html> 

UploadServlet.java

import java.io.*; 
import javax.servlet.ServletException; 
import javax.servlet.http.*; 
import com.oreilly.servlet.MultipartRequest; 

public class UploadServlet extends HttpServlet { 

public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 

response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); 

MultipartRequest m=new MultipartRequest(request,"d:/new"); 
out.print("successfully uploaded"); 
} 
} 

web.xmlの

<web-app> 

<servlet> 
<servlet-name>UploadServlet</servlet-name> 
<servlet-class>UploadServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
<servlet-name>UploadServlet</servlet-name> 
<url-pattern>/go</url-pattern> 
</servlet-mapping> 

</web-app> 
+0

ここにコードを貼り付ける方法を次回ご確認ください。 1つのコードブロックで複数のファイルではなく読みやすいはずです。正しくフォーマットしておく必要があります。私はあなたが新しいので、私は速い進歩を遂げました:)(私はコードatmをフォーマットすることができないので、他に誰かがいるようにしています)。 – CodeShark

答えて

0

あなたはマルチパート/ FORMDATAを使用しているので、GRAPするためのコードのこの部分を試してみてくださいファイルを作成し、定義したフォルダのプロジェクトに書き込みます。
プロジェクト内にフォルダ(例:document/excel /)を作成します。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    String fileName = ""; 

    if (!ServletFileUpload.isMultipartContent((HttpServletRequest) request)) { 
     PrintWriter writer = response.getWriter(); 
     writer.println("Error: Form must has enctype=multipart/form-data."); 
     writer.flush(); 
     return; 
    } 
    DiskFileItemFactory factory = new DiskFileItemFactory(); 
    factory.setSizeThreshold(3145728); 
    factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); 
    ServletFileUpload upload = new ServletFileUpload((FileItemFactory) factory); 
    upload.setFileSizeMax(41943040); 
    upload.setSizeMax(52428800); 
    String uploadPath = String.valueOf(this.getServletContext().getRealPath("")) + File.separator + "foldername"; // example : (documents/excel/) 
    File uploadDir = new File(uploadPath); 
    if (!uploadDir.exists()) { 
     uploadDir.mkdir(); 
    } 
    try { 

     List<FileItem> formItems = upload.parseRequest(request); 
     if (formItems != null && formItems.size() > 0) { 
      for (FileItem item : formItems) { 
      if (item.isFormField()) 
        { 

        if ("assessment_type_id".equals(item.getFieldName())) 
        assessment= item.getString(); 
        else if ("category_id".equals(item.getFieldName())) 
        categoryid= Integer.parseInt(item.getString()); 


        } 
       else { 
        fileName = new File(item.getName()).getName(); 
        String ext1 = FilenameUtils.getExtension(fileName); 
        fileName = fileName+ "." + ext1; 
        String filePath = String.valueOf(uploadPath) + File.separator + fileName; 
        File storeFile = new File(filePath); 
        item.write(storeFile); 
        request.setAttribute("message", "File Uploaded Successfully"); 

       } 
// then Here update the Database 

      } 

     } 
    } catch (Exception ex) { 
     request.setAttribute("message", (Object) ("There was an error: " + ex.getMessage())); 

    } 
} 

UploadpathのVaRは、最後にその場所にファイルを書き込み、掲載いくつかのフォームの項目がある場合は、あなたがチェックし、プロジェクトの場所に行くことができます。
これがうまくいきますように!

+0

Javaクラスの代わりにjspファイルでこのコードを使用することはできますか? – ViRaPa

+0

はい、サーブレットクラスを作成する方が良いですし、定義済みのメソッドが2つあります。 1- doGet() 2 doPost() postメソッドで自分のコードを使用し、htmlフォームアクションを "Post"に設定します –

+0

コードは正常に動作します。しかし、フォームでは、ファイルがアップロードされた後に実行するいくつかのコードがあります。どうやってするの。フォームがあるjspに戻ってくる方法と、ファイルをアップロードした後でそのコードを実行する方法は? – ViRaPa

関連する問題