struts2 如何实现图片上传到服务器上?

时间:2022-09-16 12:16:14
struts2 如何实现图片上传到 服务器上?
要实现的功能:
1 使用 struts2 浏览图片,将浏览的图片上传到服务器上
不同的图片必须在服务器上存放在不同的文件夹下
3 例如:浏览图片t1.jpg,点击上传,服务器上产生一个相应的文件夹如tt ,在tt下存放t1.jpg重命名后的图片名tt1.jpg
再次浏览图片t2.jpg,点击上传,服务器上将要产生的文件夹名与已经存在的文件夹名tt重名,则将已有的tt文件夹删掉,然后重新创建文件夹tt并在其里面重新放t2.jpg重命名后的图片tt2.jpg

11 个解决方案

#1


最好有完整代码,谢谢

#2


依次明确下你的问题啊:
1.这没啥疑问。
2.不同的图片必须在服务器上存放在不同的文件夹下 --规则是什么?什么叫不同的图片?创建不同文件夹的规则是什么?
3.t1.jpg -->tt文件夹? 
  x1.jpg-->xx文件夹 ?
  abc.jpg-->aa文件夹?
  测试.jpg-->测测文件夹?

#3


import java.io.*;
public class FolderManager {
   //创建文件夹
   public static boolean CreateFolder(String folderpath){

    boolean flag=false;
    try{
    File file=new File(folderpath);
    if(!file.exists()){
     file.mkdir();
     System.out.println("创建文件夹成功了");
    }else{
    System.out.println("创建文件夹失败了原因是:已经存在此文件夹!!");
    }
    }catch(Exception e){
     System.out.println("创建文件夹时候出现错误!!");
     e.printStackTrace();
    }
    return flag;
   }
   //删除文件夹
   public static boolean DeleteFolder(String folderpath){
    boolean flag=false;
    try{
     File file=new File(folderpath);
    
    if(file.exists()){
     if(file.delete()){
      flag=true;
      System.out.println("删除文件夹成功!!!");
     }else{
      flag=false;
      System.out.println("文件夹内容不许为空!!!否则不能删除");
     }
    

     //System.out.println("删除文件夹成功!!!");
    }else{
     System.out.println("该文件不存在!!!");
    }
    }catch(Exception e){
     e.printStackTrace();
     System.out.println("删除文件夹时候出现错误!!!");
    }
    return flag;
   }
   //从内存中把数据写到硬盘上并创建文件
public static void createFile(String FilePath,String Context){
   File childfile=new File(FilePath);
   try {
    FileWriter fw=new FileWriter(childfile);
    fw.write(Context);
      System.out.println("数据写入硬盘成功了");
      fw.close();
      } catch (IOException e) {
    System.out.println("文件写入硬盘出现问题!!!");
    e.printStackTrace();
   }
}
//从硬盘中删除文件包括数据
public static void deleteFile(String filePath){
   File deletefile=new File(filePath);
   if(deletefile.exists()){
    if(deletefile.delete()){
     System.out.println("删除文件成功了");
    }else{
     System.out.println("文件内容不为空无法删除!!!");
    }
  
   }
}
//从硬盘中读取数据到内存中
public static String readfile(String path){
   String context="";
   String childcontext="";
   File myfile=new File(path);
   try {
    FileReader fr=new FileReader(myfile);
    BufferedReader bf=new BufferedReader(fr);
    try {
     while((childcontext=bf.readLine())!=null){
      context=context+childcontext+"\n";
     }
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return context;
}

public static void main(String [] arg){
   //创建文件夹
   String folderpath="F:\\xian.txt";
   String aa=FolderManager.readfile(folderpath);
   System.out.println(aa);
   //FolderManager.CreateFolder(folderpath);
   //想文件夹中添加文件
//String filePath="F:\\Love\\xian.txt";
   //String Context="?血一样东西真的不容易,不管灾难沃野奥奴隶,否则我付出的都白费了我要努力!!";
//创建一个从内存 中取数据写入硬盘的文件
//FolderManager.createFile(filePath, Context);
//删除带有数据的文件
//FolderManager.deleteFile(filePath);
   //删除文件夹
   //FolderManager.DeleteFolder(folderpath);
}
}

上面是对文件夹的操作,至于怎么上传文件到哪,你应该已经会了

#4


昨天难道还没解决上传图片问题?
不同的图片必须在服务器上存放在不同的文件夹下,为什么要这样搞呢?

#5


引用 4 楼 zxingchao2009 的回复:
昨天难道还没解决上传图片问题?
不同的图片必须在服务器上存放在不同的文件夹下,为什么要这样搞呢?
我们头的意思,昨天实现的了图片上传,今天头说必须放在不同的文件夹下

#6


String savePath = ServletActionContext.getServletContext().getRealPath(  
                ""); // 获取项目根路径  
savePath = savePath + "/file/";  

昨天的那个代码是将图片都上传到file目录下,是写死的
如果改成动态的你加个判断,让savePath每次都变化,具体怎么变,你自己写逻辑判断就行了

#7


恩,知道了,谢谢
引用 6 楼 zxingchao2009 的回复:
String savePath = ServletActionContext.getServletContext().getRealPath(  
  ""); // 获取项目根路径  
savePath = savePath + "/file/";  

昨天的那个代码是将图片都上传到file目录下,是写死的
如果改成动态的你加个判断,让savePath每次都变化,具体怎么变,你自己写……

#8


照你的意思,第一次上传的图片tt1.jpg将会被删除?
给你一段删除文件夹的代码:
// 删除文件夹
private void deleteFolder(String folderPath){
this.deleteAllFile(folderPath);
new File(folderPath).delete();
}

// 删除文件
private void deleteAllFile(String path){
File file = new File(path);
if(!file.isDirectory()) return ;
if(!file.exists()) return ;

String fileList[] = file.list();
for(int i = 0; i < fileList.length; i++){
String temp = File.separator.endsWith(path) ? path+fileList[i] : path+File.separator+fileList[i];
new File(temp).delete();
if(new File(temp).isDirectory()){
this.deleteAllFile(path + File.separator + fileList[i]);
this.deleteFolder(path + File.separator + fileList[i]);
}
}
}

#9


学习啦!!!

#10


o  I see

#11


上传解决了
路径就很容易了

#1


最好有完整代码,谢谢

#2


依次明确下你的问题啊:
1.这没啥疑问。
2.不同的图片必须在服务器上存放在不同的文件夹下 --规则是什么?什么叫不同的图片?创建不同文件夹的规则是什么?
3.t1.jpg -->tt文件夹? 
  x1.jpg-->xx文件夹 ?
  abc.jpg-->aa文件夹?
  测试.jpg-->测测文件夹?

#3


import java.io.*;
public class FolderManager {
   //创建文件夹
   public static boolean CreateFolder(String folderpath){

    boolean flag=false;
    try{
    File file=new File(folderpath);
    if(!file.exists()){
     file.mkdir();
     System.out.println("创建文件夹成功了");
    }else{
    System.out.println("创建文件夹失败了原因是:已经存在此文件夹!!");
    }
    }catch(Exception e){
     System.out.println("创建文件夹时候出现错误!!");
     e.printStackTrace();
    }
    return flag;
   }
   //删除文件夹
   public static boolean DeleteFolder(String folderpath){
    boolean flag=false;
    try{
     File file=new File(folderpath);
    
    if(file.exists()){
     if(file.delete()){
      flag=true;
      System.out.println("删除文件夹成功!!!");
     }else{
      flag=false;
      System.out.println("文件夹内容不许为空!!!否则不能删除");
     }
    

     //System.out.println("删除文件夹成功!!!");
    }else{
     System.out.println("该文件不存在!!!");
    }
    }catch(Exception e){
     e.printStackTrace();
     System.out.println("删除文件夹时候出现错误!!!");
    }
    return flag;
   }
   //从内存中把数据写到硬盘上并创建文件
public static void createFile(String FilePath,String Context){
   File childfile=new File(FilePath);
   try {
    FileWriter fw=new FileWriter(childfile);
    fw.write(Context);
      System.out.println("数据写入硬盘成功了");
      fw.close();
      } catch (IOException e) {
    System.out.println("文件写入硬盘出现问题!!!");
    e.printStackTrace();
   }
}
//从硬盘中删除文件包括数据
public static void deleteFile(String filePath){
   File deletefile=new File(filePath);
   if(deletefile.exists()){
    if(deletefile.delete()){
     System.out.println("删除文件成功了");
    }else{
     System.out.println("文件内容不为空无法删除!!!");
    }
  
   }
}
//从硬盘中读取数据到内存中
public static String readfile(String path){
   String context="";
   String childcontext="";
   File myfile=new File(path);
   try {
    FileReader fr=new FileReader(myfile);
    BufferedReader bf=new BufferedReader(fr);
    try {
     while((childcontext=bf.readLine())!=null){
      context=context+childcontext+"\n";
     }
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return context;
}

public static void main(String [] arg){
   //创建文件夹
   String folderpath="F:\\xian.txt";
   String aa=FolderManager.readfile(folderpath);
   System.out.println(aa);
   //FolderManager.CreateFolder(folderpath);
   //想文件夹中添加文件
//String filePath="F:\\Love\\xian.txt";
   //String Context="?血一样东西真的不容易,不管灾难沃野奥奴隶,否则我付出的都白费了我要努力!!";
//创建一个从内存 中取数据写入硬盘的文件
//FolderManager.createFile(filePath, Context);
//删除带有数据的文件
//FolderManager.deleteFile(filePath);
   //删除文件夹
   //FolderManager.DeleteFolder(folderpath);
}
}

上面是对文件夹的操作,至于怎么上传文件到哪,你应该已经会了

#4


昨天难道还没解决上传图片问题?
不同的图片必须在服务器上存放在不同的文件夹下,为什么要这样搞呢?

#5


引用 4 楼 zxingchao2009 的回复:
昨天难道还没解决上传图片问题?
不同的图片必须在服务器上存放在不同的文件夹下,为什么要这样搞呢?
我们头的意思,昨天实现的了图片上传,今天头说必须放在不同的文件夹下

#6


String savePath = ServletActionContext.getServletContext().getRealPath(  
                ""); // 获取项目根路径  
savePath = savePath + "/file/";  

昨天的那个代码是将图片都上传到file目录下,是写死的
如果改成动态的你加个判断,让savePath每次都变化,具体怎么变,你自己写逻辑判断就行了

#7


恩,知道了,谢谢
引用 6 楼 zxingchao2009 的回复:
String savePath = ServletActionContext.getServletContext().getRealPath(  
  ""); // 获取项目根路径  
savePath = savePath + "/file/";  

昨天的那个代码是将图片都上传到file目录下,是写死的
如果改成动态的你加个判断,让savePath每次都变化,具体怎么变,你自己写……

#8


照你的意思,第一次上传的图片tt1.jpg将会被删除?
给你一段删除文件夹的代码:
// 删除文件夹
private void deleteFolder(String folderPath){
this.deleteAllFile(folderPath);
new File(folderPath).delete();
}

// 删除文件
private void deleteAllFile(String path){
File file = new File(path);
if(!file.isDirectory()) return ;
if(!file.exists()) return ;

String fileList[] = file.list();
for(int i = 0; i < fileList.length; i++){
String temp = File.separator.endsWith(path) ? path+fileList[i] : path+File.separator+fileList[i];
new File(temp).delete();
if(new File(temp).isDirectory()){
this.deleteAllFile(path + File.separator + fileList[i]);
this.deleteFolder(path + File.separator + fileList[i]);
}
}
}

#9


学习啦!!!

#10


o  I see

#11


上传解决了
路径就很容易了