Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to add timestamp for the file name when file is uploading

This is a related java code for upload file code and i need to add a timestamp for a file name and then it is uploaded to the particular directory

 public class Upload extends HttpServlet {

   private static final long serialVersionUID = 1L;
   public void init() throws ServletException {

     System.out.println(this.getClass().getName());
   }

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     //boolean MultipartRequest;
     //String PrintWriter;

     response.setContentType("text/html");

     PrintWriter out = response.getWriter();
     MultipartRequest multipartRequest = new MultipartRequest(request, "/home/hadoop/Desktop");

     out.println("succcesfully uploaded");

   }
   public void destroy() {
     System.out.println(this.getClass().getName());
   }

 }
<html>

<body>

  <form action="UploadFile" method="post" enctype="multipart/form-data">
    Selectfile:
    <input type="file" name="filename">
    <br/>
    <input type="submit" value="Upload">
  </form>
</body>

</html>
like image 409
nani Avatar asked Sep 27 '22 15:09

nani


2 Answers

MultipartRequest by default contains a file rename policy.

To avoid collisions and have fine control over file placement, there's a constructor variety that takes a pluggable FileRenamePolicy implementation. A particular policy can choose to rename or change the location of the file before it's written.

MultipartRequest(javax.servlet.http.HttpServletRequest request,
                 java.lang.String saveDirectory, 
                 int maxPostSize, 
                 FileRenamePolicy policy)

Note: Due to low reputation, I can't add comments and had to contribute this as an answer. Don't downvote this, instead correct or comment on the same.

like image 60
Gopal Kk Avatar answered Oct 03 '22 01:10

Gopal Kk


Simply concat "_" + System.currentTimeMillis() to the filename ?

If instead of the milliseconds you want the intellegible timestamp, simply use a DateFormat as shown in the other answer.

With Java EE >= 6:

@WebServlet("/FileUploadServlet")
@MultipartConfig(fileSizeThreshold=1024*1024*10,    // 10 MB 
                 maxFileSize=1024*1024*50,          // 50 MB
                 maxRequestSize=1024*1024*100)      // 100 MB
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String applicationPath = request.getServletContext().getRealPath("");
        String uploadFilePath = applicationPath + File.separator + "uploads";              
        File fileSaveDir = new File(uploadFilePath);
        if (!fileSaveDir.exists()) { fileSaveDir.mkdirs(); }

        String fileName = null;
        for (Part part : request.getParts()) {
            fileName = getFileName(part) + "_" + System.currentTimeMillis(); // <----- HERE
            part.write(uploadFilePath + File.separator + fileName);
        }

        request.setAttribute("message", fileName + " File uploaded successfully!");
        getServletContext().getRequestDispatcher("/response.jsp").forward(
                request, response);
    }      
    private String getFileName(Part part) {
        String contentDisp = part.getHeader("content-disposition");
        String[] tokens = contentDisp.split(";");
        for (String token : tokens) {
            if (token.trim().startsWith("filename")) {
                return token.substring(token.indexOf("=") + 2, token.length()-1);
            }
        }
        return "";
    }
}

The code is a fork of the one in this article

like image 41
Andrea Ligios Avatar answered Oct 03 '22 01:10

Andrea Ligios