你的位置:首页 > Java教程

[Java教程]java web图片上传和文件上传


图片上传和文件上传本质上是一样的,图片本身也是文件。文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作。

注意事项

1.form表单一定要写属性enctype="multipart/form-data"

2.为了能保证文件能上传成功file控件的name属性值要和你提交的控制层变量名一致,

例如空间名是file那么你要在后台这样定义

private File file; //file控件名

private String fileContentType;//图片类型

private String fileFileName; //文件名

 

1.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="pragma" content="no-cache" /> <base target="_self"> <title>文件上传</title> </head><body><form method="post" action="" enctype="multipart/form-data"><input type="file" name="file" value="file"><input type="submit" value="确定"></form></body></html>

 

 

1.页面数据需要提交的Controller

package com.cpsec.tang.chemical.action;import java.io.File;import java.io.IOException;import java.util.Random;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import org.apache.commons.io.FileUtils;import org.apache.struts2.ServletActionContext;import org.springframework.stereotype.Controller;import com.cpsec.tang.chemical.biz.LunboBiz;import com.cpsec.tang.chemical.entity.Image;import com.opensymphony.xwork2.ActionSupport;@Controller("lunboAction")public class LunboAction extends ActionSupport {  /**   *   */  private static final long serialVersionUID = 1L;  @Resource(name="lunboBiz")  private LunboBiz lunboBiz;  private Image image;  private File file; //file控件名  private String fileContentType;//图片类型  private String fileFileName; //文件名  private Integer number;    public String findImage(){    image=lunboBiz.findImage();    return SUCCESS;  }    public String alterImage(){    image=lunboBiz.findImage();    return SUCCESS;  }    public String alterImage1(){    HttpServletRequest request = ServletActionContext.getRequest();    String root = request.getRealPath("/upload");//图片要上传到的服务器路径    String names[]=fileFileName.split("\\.");    String fileName="";    if(names.length>=1){      fileName=getRandomString(20)+"."+names[names.length-1];    }    String picPath="upload/"+fileName;//图片保存到数据库的路径    File file1=new File(root);    try {      FileUtils.copyFile(file, new File(file1,fileName));      }    } catch (IOException e) {      e.printStackTrace();    }    return SUCCESS;  }    /*获取一条随机字符串*/  public String getRandomString(int length) { //length表示生成字符串的长度     String base = "abcdefghijklmnopqrstuvwxyz0123456789";       Random random = new Random();       StringBuffer sb = new StringBuffer();       for (int i = 0; i < length; i++) {         int number = random.nextInt(base.length());         sb.append(base.charAt(number));       }       return sb.toString();     }  }

这是通过复制的方式上传文件,还有其他方式

方法二

@Controller("contractAction")public class ContractAction extends ActionSupport {    private final static String UPLOADDIR = "/files";//文件上传的路径,在webContent下建立  private File file; //input控件名一定为file   //上传文件名集合    private String fileFileName;    //上传文件内容类型集合    private String fileContentType;     private String filename;   public String upload() throws FileNotFoundException, IOException{    String path=uploadFile();//文件保存数据库的路径      return SUCCESS;  }    //执行上传功能    @SuppressWarnings("deprecation")  public String uploadFile() throws FileNotFoundException, IOException {      try {        InputStream in = new FileInputStream(file);        String dir = ServletActionContext.getRequest().getRealPath(UPLOADDIR);       File fileLocation = new File(dir);       //此处也可以在应用根目录手动建立目标上传目录       if(!fileLocation.exists()){         boolean isCreated = fileLocation.mkdir();         if(!isCreated) {           //目标上传目录创建失败,可做其他处理,例如抛出自定义异常等,一般应该不会出现这种情况。           return null;         }       }      // this.setFileFileName(getRandomString(20));      String[] Name=this.getFileFileName().split("\\.");      String fileName=getRandomString(20)+"."+Name[Name.length-1];      this.setFileFileName(fileName);      System.out.println(fileName);      File uploadFile = new File(dir, fileName);      OutputStream out = new FileOutputStream(uploadFile);        byte[] buffer = new byte[1024 * 1024];        int length;        while ((length = in.read(buffer)) > 0) {          out.write(buffer, 0, length);        }      in.close();        out.close();        return UPLOADDIR.substring(1)+"\\"+fileFileName;      } catch (FileNotFoundException ex) {        return null;        } catch (IOException ex) {        return null;      }    }      public static String getRandomString(int length){    String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";    Random random=new Random();    StringBuffer sb=new StringBuffer();    for(int i=0;i<length;i++){     int number=random.nextInt(62);     sb.append(str.charAt(number));    }    return sb.toString();  }  }

 

除了单图上传还有多图上传,原理都是一样的

package com.cpsec.tang.chemical.action;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 多文件上传 */public class FilesUploadAction extends ActionSupport {     //上传文件存放路径       private final static String UPLOADDIR = "/upload";      //上传文件集合       private List<File> file;      //上传文件名集合       private List<String> fileFileName;      //上传文件内容类型集合       private List<String> fileContentType;           public List<File> getFile() {        return file;      }       public void setFile(List<File> file) {        this.file = file;      }       public List<String> getFileFileName() {        return fileFileName;      }       public void setFileFileName(List<String> fileFileName) {        this.fileFileName = fileFileName;      }       public List<String> getFileContentType() {        return fileContentType;      }       public void setFileContentType(List<String> fileContentType) {        this.fileContentType = fileContentType;      }            public String uploadform() throws Exception {       HttpServletRequest request = ServletActionContext.getRequest();       String webpath=null;//上传路径       for (int i = 0; i < file.size(); i++) {          //循环上传每个文件           uploadFile(i);         webpath="upload/"+this.getFileFileName().get(i);       }       return "SUCCESS";     }             //执行上传功能       private String uploadFile(int i) throws FileNotFoundException, IOException {        try {                   InputStream in = new FileInputStream(file.get(i));          String dir = ServletActionContext.getRequest().getRealPath(UPLOADDIR);          File fileLocation = new File(dir);          //此处也可以在应用根目录手动建立目标上传目录          if(!fileLocation.exists()){            boolean isCreated = fileLocation.mkdir();            if(!isCreated) {              //目标上传目录创建失败,可做其他处理,例如抛出自定义异常等,一般应该不会出现这种情况。              return null;            }          }          String fileName=this.getFileFileName().get(i);          File uploadFile = new File(dir, fileName);         OutputStream out = new FileOutputStream(uploadFile);          byte[] buffer = new byte[1024 * 1024];          int length;          while ((length = in.read(buffer)) > 0) {            out.write(buffer, 0, length);          }         in.close();          out.close();          return uploadFile.toString();       } catch (FileNotFoundException ex) {         return null;        } catch (IOException ex) {         return null;        }      }   }