前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Javaweb| 上传文件

Javaweb| 上传文件

作者头像
子乾建建-Jeff
发布2020-06-29 14:55:25
7930
发布2020-06-29 14:55:25
举报
文章被收录于专栏:iBroPro

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。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iBroPro 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档