Java文件上载上载时重命名文件

Java文件上载上载时重命名文件,java,servlets,file-upload,Java,Servlets,File Upload,我正在使用Servlet上传一个文件,代码如下: FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); out.print("FileName: " + fileName); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); if (file

我正在使用Servlet上传一个文件,代码如下:

FileItem fi = (FileItem) i.next();
String fileName = fi.getName();
out.print("FileName: " + fileName);
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();

if (fileName == null || fileName == "") {
    resumefilepath = "";
} else {

    resumeflag = 1;

    if (fileName.lastIndexOf("\\") >= 0) {

        file = new File(resumePath + fileName.substring(fileName.lastIndexOf("\\")));

    } else {

        file = new File(resumePath + fileName.substring(fileName.lastIndexOf("\\") + 1));

    }

    fi.write(file);
我得到的是我的文件被正确上传。我需要用不同的名称上传我的文件,但请确保文件内容不应更改。假设我有一个图像“A.png”,那么它应该保存为“B.png”。请帮助大家??我试过这样做:

File f1 = new File("B.png");
// Rename file (or directory)
file.renameTo(f1);

fi.write(file);

但是不工作

假设您引用的是apachecommons
FileItem
您只需控制传递给的
文件
实例。此时,
文件
对象只是一个抽象名称,文件将通过该方法创建

正是您的代码从
FileItem
读取名称,并用相同的名称构造
文件
对象。你不必这么做。因此,当您将
new File(“B.png”)
传递给
FileItem
write
方法时,代表
a.png
上传的内容将保存在文件
B.png


要按你要求的去做,你可以改变路线

fi.write(file);


代码的简化版本可能如下所示:

String fileName = fi.getName();// name provided by uploader
if (fileName == null || fileName == "") {
    resumefilepath = "";
} else {
    // convert to simple name, i.e. remove any prepended path
    fileName = fileName.substring(fileName.lastIndexOf(File.separatorChar)+1);
    // your substitution:
    if(fileName.equalsIgnoreCase("A.png")) fileName="B.png";
    // construct File object
    file = new File(resumePath, fileName);
    // and create/write the file
    fi.write(file);
}

若你们正在寻找一个答案,你们可以上传文件,更改文件名,并将其插入数据库

<%
   File file ;
   int maxFileSize = 5000 * 1024;
   int maxMemSize = 5000 * 1024;
   ServletContext context = pageContext.getServletContext();
   String filePath = "/NVS_upload/NVS_school_facilities_img/";
   String title=null,description=null,facility_id=null;
   ArrayList<String> imagepath=new ArrayList<String>();  
   String completeimagepath=null;

   // Verify the content type
   String contentType = request.getContentType();
   int verify=0;
   //String school_id=null;
   String exp_date=null;
   String rel_date=null;
   int school_id=0;
   String title_hindi=null;
   String description_hindi=null;

   if ((contentType.indexOf("multipart/form-data") >= 0)) {
      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);

      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);

      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );

      try { 
         // Parse the request to get file items.
         List fileItems = upload.parseRequest(request);

         // Process the uploaded file items
         Iterator i = fileItems.iterator();



         while ( i.hasNext () ) {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () ) {
               // Get the uploaded file parameters
               String fieldName = fi.getFieldName();
               String fileName = fi.getName();
               boolean isInMemory = fi.isInMemory();
               long sizeInBytes = fi.getSize();
               //this genrates unique file name
               String id = UUID.randomUUID().toString();
               //we are splitting file name here such that we can get file name and extension differently
               String[] fileNameSplits = fileName.split("\\.");
              // extension is assumed to be the last part
               int extensionIndex = fileNameSplits.length - 1;
               // add extension to id
               String newfilename= id + "." + fileNameSplits[extensionIndex];
               //File newName = new File(filePath + "/" +);
               //this stores the new file name to arraylist so that it cn be stored in database
               imagepath.add(newfilename);  

               File uploadedFile = new File(filePath , newfilename);   
               fi.write(uploadedFile);


               out.println("Uploaded Filename: " + filePath + 
               newfilename + "<br>");
            }

            else if (fi.isFormField()) {


      if(fi.getFieldName().equals("title"))
        {   
          title=fi.getString();

          out.println(title);
        }


        if(fi.getFieldName().equals("description"))
        {   
             description=fi.getString();
             //out.println(description);
        }



        if(fi.getFieldName().equals("activity_name"))
        {   
             facility_id=fi.getString();
             //out.println(facility_id);
        }

if(fi.getFieldName().equals("rel_date"))
        {   
             rel_date=fi.getString();
             //out.println(school_id);
        }




        if(fi.getFieldName().equals("exp_date"))
        {   
             exp_date=fi.getString();
            // out.println(school_id);
        }


if(fi.getFieldName().equals("school_id"))
        {   
             school_id=Integer.valueOf(fi.getString());
            // out.println(school_id);
        }

if(fi.getFieldName().equals("title-hindi"))
        {   
             title_hindi=fi.getString();
            // out.println(school_id);
        }

if(fi.getFieldName().equals("description-hindi"))
        {   
            description_hindi=fi.getString();
             out.println(school_id);
        }

    }
         }
         out.println("</body>");
         out.println("</html>");
      } catch(Exception ex) {
         out.println(ex);
      }
   } 

   else {
      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      out.println("<p>No file uploaded</p>"); 
      out.println("</body>");
      out.println("</html>");
   }
%>

<%
try{


  completeimagepath=imagepath.get(0)+","+imagepath.get(1)+","+imagepath.get(2);


        Connection conn = null;
        Class.forName("org.postgresql.Driver").newInstance();
        conn = DriverManager.getConnection(
                "connection url");

PreparedStatement ps=conn.prepareStatement("INSERT INTO activities_upload (activity_name,title,description,pdfname,publish_date,expiry_date,title_hindi,description_hindi,school_id) VALUES(?,?,?,?,?,?,?,?,?)");
ps.setString(1,facility_id);
ps.setString(2,title);
ps.setString(3,description);
ps.setString(4,completeimagepath);
ps.setDate(5,java.sql.Date.valueOf(rel_date));
ps.setDate(6,java.sql.Date.valueOf(exp_date));
ps.setString(7,title_hindi);
ps.setString(8,description_hindi);
ps.setInt(9,school_id);

 verify=ps.executeUpdate();



        }

        catch(Exception e){
        out.println(e);

        }

    if(verify>0){
    HttpSession session = request.getSession(true);

    session.setAttribute("updated","true");
    response.sendRedirect("activitiesform.jsp");


    }


    %>
=0){
DiskFileItemFactory=新的DiskFileItemFactory();
//将存储在内存中的最大大小
factory.setSizeThreshold(maxMemSize);
//保存大于maxMemSize的数据的位置。
setRepository(新文件(“c:\\temp”);
//创建新的文件上载处理程序
ServletFileUpload upload=新的ServletFileUpload(工厂);
//要上载的最大文件大小。
upload.setSizeMax(maxFileSize);
试试{
//解析请求以获取文件项。
List fileItems=upload.parseRequest(请求);
//处理上载的文件项
迭代器i=fileItems.Iterator();
而(i.hasNext()){
FileItem fi=(FileItem)i.next();
如果(!fi.isFormField()){
//获取上传的文件参数
字符串fieldName=fi.getFieldName();
字符串文件名=fi.getName();
布尔值isInMemory=fi.isInMemory();
long-sizeInBytes=fi.getSize();
//此文件名是唯一的
字符串id=UUID.randomUUID().toString();
//我们在这里拆分文件名,以便以不同的方式获得文件名和扩展名
字符串[]fileNameSplits=fileName.split(“\\”);
//假设扩展是最后一部分
int extensionIndex=fileNameSplits.length-1;
//向id添加扩展名
字符串newfilename=id+“+”fileNameSplits[extensionIndex];
//File newName=新文件(filePath+“/”+);
//这会将新文件名存储到arraylist,以便将其存储在数据库中
添加(新文件名);
文件上传文件=新文件(文件路径,新文件名);
fi.write(上传文件);
out.println(“上传的文件名:+filePath+
新文件名+“
”; } else if(fi.isFormField()){ if(fi.getFieldName().equals(“title”)) { title=fi.getString(); out.println(标题); } if(fi.getFieldName().equals(“description”)) { description=fi.getString(); //out.println(描述); } if(fi.getFieldName().equals(“活动名称”)) { facility_id=fi.getString(); //out.println(设施标识); } 如果(fi.getFieldName().equals(“rel_date”)) { rel_date=fi.getString(); //out.println(学校id); } 如果(fi.getFieldName().equals(“exp_日期”)) { exp_date=fi.getString(); //out.println(学校id); } 如果(fi.getFieldName().equals(“学校id”)) { school_id=Integer.valueOf(fi.getString()); //out.println(学校id); } if(fi.getFieldName().equals(“title印地语”)) { title_hindi=fi.getString(); //out.println(学校id); } if(fi.getFieldName().equals(“描述印地语”)) { description_hindi=fi.getString(); out.println(学校id); } } } out.println(“”); out.println(“”); }捕获(例外情况除外){ out.println(ex); } } 否则{ out.println(“”); out.println(“”); out.println(“Servlet上传”); out.println(“”); out.println(“”); out.println(“没有上传文件”

”; out.println(“”); out.println(“”); } %> 0){ HttpSession session=request.getSession(true); session.setAttribute(“更新”、“真”); sendRedirect(“activitiesform.jsp”); } %>
用于重命名文件。@Braj您能编辑我的代码并粘贴为答案吗???@Braj在其他示例中,他们正在创建新文件,然后保存,在这种情况下会丢失我文件的内容,我需要将我的页面内容保留在那里!!不能更改内容,只能更改名称首先将文件保存在磁盘上,然后重命名它。fi.renameTo()方法出现错误@Hogler buddy是的,我正在使用pache Commons文件项。你能告诉我如何编辑我的代码来做同样的事情吗?我不是你这样的专家。请帮帮我buddy@Hoglerbuddy同一问题,但名称未更改!!您确定输入名称是
“A.png”
?您可以添加日志记录语句以了解实际值。我确信
write
方法将写入您指定的文件,而不会写入其他文件。您还应该确认您没有看到
<%
   File file ;
   int maxFileSize = 5000 * 1024;
   int maxMemSize = 5000 * 1024;
   ServletContext context = pageContext.getServletContext();
   String filePath = "/NVS_upload/NVS_school_facilities_img/";
   String title=null,description=null,facility_id=null;
   ArrayList<String> imagepath=new ArrayList<String>();  
   String completeimagepath=null;

   // Verify the content type
   String contentType = request.getContentType();
   int verify=0;
   //String school_id=null;
   String exp_date=null;
   String rel_date=null;
   int school_id=0;
   String title_hindi=null;
   String description_hindi=null;

   if ((contentType.indexOf("multipart/form-data") >= 0)) {
      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);

      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);

      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );

      try { 
         // Parse the request to get file items.
         List fileItems = upload.parseRequest(request);

         // Process the uploaded file items
         Iterator i = fileItems.iterator();



         while ( i.hasNext () ) {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () ) {
               // Get the uploaded file parameters
               String fieldName = fi.getFieldName();
               String fileName = fi.getName();
               boolean isInMemory = fi.isInMemory();
               long sizeInBytes = fi.getSize();
               //this genrates unique file name
               String id = UUID.randomUUID().toString();
               //we are splitting file name here such that we can get file name and extension differently
               String[] fileNameSplits = fileName.split("\\.");
              // extension is assumed to be the last part
               int extensionIndex = fileNameSplits.length - 1;
               // add extension to id
               String newfilename= id + "." + fileNameSplits[extensionIndex];
               //File newName = new File(filePath + "/" +);
               //this stores the new file name to arraylist so that it cn be stored in database
               imagepath.add(newfilename);  

               File uploadedFile = new File(filePath , newfilename);   
               fi.write(uploadedFile);


               out.println("Uploaded Filename: " + filePath + 
               newfilename + "<br>");
            }

            else if (fi.isFormField()) {


      if(fi.getFieldName().equals("title"))
        {   
          title=fi.getString();

          out.println(title);
        }


        if(fi.getFieldName().equals("description"))
        {   
             description=fi.getString();
             //out.println(description);
        }



        if(fi.getFieldName().equals("activity_name"))
        {   
             facility_id=fi.getString();
             //out.println(facility_id);
        }

if(fi.getFieldName().equals("rel_date"))
        {   
             rel_date=fi.getString();
             //out.println(school_id);
        }




        if(fi.getFieldName().equals("exp_date"))
        {   
             exp_date=fi.getString();
            // out.println(school_id);
        }


if(fi.getFieldName().equals("school_id"))
        {   
             school_id=Integer.valueOf(fi.getString());
            // out.println(school_id);
        }

if(fi.getFieldName().equals("title-hindi"))
        {   
             title_hindi=fi.getString();
            // out.println(school_id);
        }

if(fi.getFieldName().equals("description-hindi"))
        {   
            description_hindi=fi.getString();
             out.println(school_id);
        }

    }
         }
         out.println("</body>");
         out.println("</html>");
      } catch(Exception ex) {
         out.println(ex);
      }
   } 

   else {
      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      out.println("<p>No file uploaded</p>"); 
      out.println("</body>");
      out.println("</html>");
   }
%>

<%
try{


  completeimagepath=imagepath.get(0)+","+imagepath.get(1)+","+imagepath.get(2);


        Connection conn = null;
        Class.forName("org.postgresql.Driver").newInstance();
        conn = DriverManager.getConnection(
                "connection url");

PreparedStatement ps=conn.prepareStatement("INSERT INTO activities_upload (activity_name,title,description,pdfname,publish_date,expiry_date,title_hindi,description_hindi,school_id) VALUES(?,?,?,?,?,?,?,?,?)");
ps.setString(1,facility_id);
ps.setString(2,title);
ps.setString(3,description);
ps.setString(4,completeimagepath);
ps.setDate(5,java.sql.Date.valueOf(rel_date));
ps.setDate(6,java.sql.Date.valueOf(exp_date));
ps.setString(7,title_hindi);
ps.setString(8,description_hindi);
ps.setInt(9,school_id);

 verify=ps.executeUpdate();



        }

        catch(Exception e){
        out.println(e);

        }

    if(verify>0){
    HttpSession session = request.getSession(true);

    session.setAttribute("updated","true");
    response.sendRedirect("activitiesform.jsp");


    }


    %>