Javaweb| 上传文件

2020-06-29 14:55:25 浏览数 (1)

Javaweb文件上传

前段时间推了一篇Javaweb中可以下载文件的方法,不难,当时格式太乱了。(今天在词条又重新发了一次)后来膜拜大佬,学会了一些精妙简单排版,受益受益了。 今天给大家再分享一个上传文件的方法,在百度上搜索真是八仙过海,各显神通。这个也是在前人的基础上,稍加修改,分享给大家。个人挺喜欢的。 文件上传与文件下载作为两个重要模块,也是每个网站、app不可或缺的一部分,日积月累,积少成多。

采用技术: ajax(不必太精,会用就行) 在整体框架SSM上开发(平台无所谓ssh、springboot都一样)

前端:

代码语言:javascript复制
<script type="text/javascript">
    function ajaxFileUpload(id) {
      $.ajaxFileUpload({
        url : '<%=request.getContextPath()%>/upload/uploadimg.do',
        secureuri : false,
        fileElementId : id,
        dataType : 'json',
        success : function(data, status) {
          var isok=data.isok;
          if(isok==1){
            $("#img1").attr("src","<%=request.getContextPath()%>/file/" data.path);
            $("#img").val(data.path);
          }
        },
        error : function(data, status, e) {
          alert('上传出错');
        }
      });
      return false;
    }
</script>
<body>
    <input type="file"  id="file" name="file" onchange="ajaxFileUpload('file')"/>
</body>

fileElementId : id 确保为file.

url为请求的后端Controller层路径.

后端:

代码语言:javascript复制
/*
 * 上传图片
 * 0代表失败,1代表成功,2格式错误
 */
@Controller
@RequestMapping("/upload")
public class UploadController {

  @ResponseBody
  @RequestMapping("uploadimg.do")
  public Map<String, String> findAllWhere(HttpServletRequest request) throws IOException {
    Map<String, String> map=new HashMap<String, String>();
        // 转型为MultipartHttpRequest  
        try {  
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  
            List<MultipartFile> fileList = multipartRequest.getFiles("file");  
            for (MultipartFile mf : fileList) { 
                if(!mf.isEmpty()){
                  try {  
                        // 文件保存路径  
                    String dirname=Tool.getyyyyMMdd();
                        String filePath ="暂时可以写发布后的路径见注释1" "image/" dirname "/";  
                        File file = new File(filePath);
                    if (!file.exists()) {
                      file.mkdirs();
                    }
                        String filenamelast=getfilenamelast(mf.getOriginalFilename()).toUpperCase();
                        if(!filenamelast.equals(".JPG")&&!filenamelast.equals(".GIF")&&!filenamelast.equals(".JPEG")&&!filenamelast.equals(".PNG")&&!filenamelast.equals(".SWF")){
                           map.put("isok", "2");
                        }else{
                          filenamelast=Tool.getyyyyMMddHHmmssSSS() Tool.getRandom() filenamelast;
                          map.put("isok", "1");
                          map.put("path",  dirname "/" filenamelast);
                          // 转存文件  
                          mf.transferTo(new File(filePath filenamelast));  
                        }
          } catch (Exception e) {
            map.put("isok", "0");
            e.printStackTrace();
          }
                }  
            }  
        } catch (Exception e) {
            e.printStackTrace();  
        }  
    return map;
  }
  
    //获取文件名
    private String getfilenamelast(String filename){
      int start=filename.lastIndexOf(".");
      if(start!=-1){
        filename=filename.substring(start, filename.length());
      }
      return filename;
    }
    
}

这里,并没有对数据库进行操作,我们知道,保存图片在数据库中只是保存里图片的地址! 想操作数据库 只需要一个根据唯一id进行update的操作即可。 发布在tomcat服务器下的图片重启后就被清除了,可以尝试发布在ftp服务器上。自己的电脑即可搭建一个ftp服务器。(关于如何在本地搭建一个ftp服务器,后面继续更新) 每次把图片保存在ftp服务器里面,需要显示图片时从ftp服务器读取即可。 可以看到在Controller里面我们用到了几个工具类,现在把这几个类也贴出来。

Tool类:

代码语言:javascript复制
public class Tool {

  private static Logger log = Logger.getLogger(Tool.class);
          //获取日期
        public static String getyyyyMMdd(){
          Date d = new Date();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          return sdf.format(d);
        }
          //获取带毫秒时间戳
        public static String getyyyyMMddHHmmssSSS(){
          Date d = new Date();
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
          return sdf.format(d);
        }
          //获取10000-100000的随机数
        public static int getRandom(){
          int max=100000;
              int min=10000;
              Random random = new Random();
              int s = random.nextInt(max)%(max-min 1)   min;
              return s;
        }
  }

到此就完全结束了!

注释1:发布路径eclipse中,默认在eclipse的工作空间下;

也可以在server中修改。

这次更新时间有点长,就发现,人如果可以战胜惰性,很多事都可以做成功。伪努力也是最害人的,杜绝娇弱残喘,我行我就杠。 好好学习,好好工作,努力赚取人生第一个100w。

0 人点赞