zoukankan      html  css  js  c++  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;   
                 }   
             }
         }
  • 相关阅读:
    单页面应用和多页面应用区别及优缺点
    Vue中双向数据绑定是如何实现的?
    vue组件中data为什么必须是一个函数?
    $nextTick的使用
    分别简述computed和watch的使用场景
    webpack结合postcss-loader实现css样式浏览器兼容前缀的添加
    KeyError:‘uid' Python常见错误
    GO语言学习之 跨平台编译
    图表动态选择+图表联动
    软件需求与分析大作业进度八
  • 原文地址:https://www.cnblogs.com/bunuo/p/upLoadFile.html
Copyright © 2011-2022 走看看