简体   繁体   中英

JavaEE, Servlet create links to files in the folder

There is a servlet that accepts files from the client and stores them in a folder. It is now necessary to list the files from this folder and create links to them (that is, click on the file name and it's downloaded from you).

Now just output a list of files in the form of text. How to create links to them? I read that for this it is enough to expose the headers, but how this is done and has not been found. Sample Code:

public class FileListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public FileListServlet() {
        super();
  }

    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {


        String param = "/dirs";

        PrintWriter w = res.getWriter();
        res.setContentType("text/html");

        String root="/dirs";
        java.io.File dir = new java.io.File(root);

        File[] fileList = dir.listFiles();

        w.println("<H2><FONT COLOR=TEAL>" + "Total number of files in the choosen directory - " +
            fileList.length + "</FONT></H2>");
        w.println("<H3><FONT COLOR=PURPLE>" +
            "Directory path - " + param + "</FONT></H3><HR>");
        w.println("<TABLE BORDER=0 CELLSPACING=5>");

       for(int i = 0; i < fileList.length; i++)
            printName(fileList[i], w);      

        w.println("</TABLE><HR>");

      }

     private void printName(File name, PrintWriter output)
      {

        String type = name.isDirectory()
            ? " (Directory)" : " (File)";
        output.println("<TR><TD>" + type + "</TD><TD><FONT COLOR=BLUE>"
            + name.getName()  + "</FONT></TD></TR>");

      }

      public String getServletInfo()
      {
        return "This servlet shows a content of a directory" +
               "mentioned in dirToShow parameter or property.";
      }
}

在此处输入图片说明

I solved my problem. In case someone needs it or someone knows a more beautiful way.

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public FileListServlet() {
        super();
  }

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

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

        File currentFolder = new File(".");
        File workingFolder = new File(currentFolder, "Sorted files");

        String root = workingFolder.getAbsolutePath();
        java.io.File dir = new java.io.File(root);

        File[] fileList = dir.listFiles();

        printWriter.println("<H2><FONT COLOR=TEAL>" + "Total number of files in the choosen directory - " +
            fileList.length + "</FONT></H2>");
        printWriter.println("<H3><FONT COLOR=PURPLE>" +
            "Directory path - " + root + "</FONT></H3><HR>");
        printWriter.println("<TABLE BORDER=0 CELLSPACING=5>");



        for(int i = 0; i < fileList.length; i++) {
            printName(fileList[i], printWriter);      
        }
        printWriter.println("</TABLE><HR>");

      }

     private void printName(File file, PrintWriter output)
      {

         System.out.println(file.getName());

        output.println("<tr><td><a href=\"https://Upload/DownloadServlet?name="
                +file.getName()+"\">" + file.getName() + "</a></td></tr>" );

      }

      public String getServletInfo()
      {
        return "This servlet shows a content of a directory" +
               "mentioned in dirToShow parameter or property.";
      }
}

And DownloadServlet

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class DownloadServlet
 */
public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public DownloadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name = request.getParameter("name");

        String fileType = "multipart/form-data";

        response.setContentType(fileType);

        response.setHeader("Content-disposition", "attachment; filename=" + name);

        File currentFolder = new File(".");
        File workingFolder = new File(currentFolder, "Sorted files");

        String root = workingFolder.getAbsolutePath();

        File file = new File(root + File.separator + name);

        OutputStream output = response.getOutputStream();
        FileInputStream input = new FileInputStream(file);

        byte[] buffer = new byte[4096];
        int lenght;

        while( ( lenght = input.read(buffer) ) > 0 ) {
            output.write(buffer, 0, lenght);
        }

        input.close();

        output.flush();
        output.close();

        response.getOutputStream().flush();
        response.getOutputStream().close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM