java实现多文件上传至本地服务器功能

博主最近在做一个内网项目,内部可以访问外部数据,但是外部访问不了内部数据,这也就造成了可能文件无法上传,所以博主另辟蹊径,在本地服务器上建立一个文件夹专门用来存储上传数据。

环境:jdk,tomcat

一、前台上传文件(ajax上传)

<input type="file" name="annexUrl" id="annexUrl" multiple="multiple"/>

其中multiple=“multiple”,设置文件多上传

function uploadFile() {
  var files = document.getElementById("annexUrl").files;
  if (files.length != 0) {
   var formData = new FormData();
   for (var i = 0; i < files.length; i++) {
    var file = files[i];
    formData.append(file.name, file);
   }
   $.ajax({
    url: 'cdc/public/saveFiles',
    type: 'POST',
    cache: false,
    data: formData,
    //这个参数是jquery特有的,不进行序列化,因为我们不是json格式的字符串,而是要传文件
    processData: false,
    //注意这里一定要设置contentType:false,不然会默认为传的是字符串,这样文件就传不过去了
    contentType: false,
    success: function (data) {
     save(data.data);
    }
   });
  } else {
   save();
  }
 }

这里需要使用到formData对象用来封装file文件对象,save()方法是用来保存上传之后返回过来的文件路径,保存到数据库,便于下载。

二、后台接收文件,并上传至服务器

// 多文件上传,返回一个对象集合(附件地址,名称)
 @RequestMapping(value = "saveFiles", method = RequestMethod.POST)
 @ResponseBody
 public JSONObject saveFiles(HttpServletRequest request, HttpServletResponse response) {
  JSONObject jsonObject = new JSONObject();
  try {
   request.setCharacterEncoding("UTF-8");
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
  Collection<Part> parts = null;
  try {
   parts = request.getParts();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ServletException e) {
   e.printStackTrace();
  } 

  Iterator<Part> iterator = parts.iterator();
//  名称集合,返回给前台
  List<String> list = new ArrayList<>();
  while (iterator.hasNext()) {
   Part part = iterator.next();
   // 生成实际存储的真实文件名(唯一)
//   不知道为什么,文件上传必须得包含获取到的文件名,否则报文件名、目录名或卷标语法不正确,图片上传没有这种限制
//   文件名,保存导数据库,用来界面显示
   String name = part.getName();
   String realName = UUID.randomUUID().toString() + name; 

   list.add(name + "&&" + realName);
   ///home/tomcat/apache-tomcat-9.0.1/files
   String realPath = "D:" + File.separator + "apache-tomcat-8.5.15" + File.separator + "files";
   // String realPath = "C:" + File.separator + "XHJ224" + File.separator + "software" + File.separator + "apache-tomcat-9.0.1" + File.separator + "files";
//    String realPath = File.separator + "home" + File.separator + "tomcat" + File.separator + "apache-tomcat-9.0.1" + File.separator + "files";
   File file = new File(realPath);
   //如果目录不存在
   if (!file.isDirectory()) {
    //创建文件上传目录
    file.mkdirs();
   }
   // 文件存放的真实路径
   String filePath = realPath + File.separator + realName;
   try {
    part.write(filePath);
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  jsonObject.put("data", list);
  return jsonObject;
 }

其中list集合添加了一个由文件名和真实文件名拼接的字符串,后期save需要。realName是为了防止多上传文件名冲突,realPath是文件保存路径,不同的操作系统有不同的路径,realPath最好放在tomcat下,便于项目移植。

其中File.separator为路径分隔符,他能自动识别是哪个操作系统而使用不同的路径分隔符(windows是‘\',linux是‘/')。最后将list返回给前台。

本文已被整理到了《Java上传操作技巧汇总》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Java实现文件上传服务器和客户端
  • Java实现文件上传至服务器的方法
  • Java实现跨服务器上传文件功能
  • java文件上传至ftp服务器的方法
  • java实现上传文件到服务器和客户端
  • Java上传文件到服务器端的方法
  • Java上传文件图片到服务器的方法
  • 基于HTML5+js+Java实现单文件文件上传到服务器功能
  • Java实现图片上传到服务器并把上传的图片读取出来
  • java实现客户端向服务器发送文件
(0)

相关推荐

  • Java上传文件到服务器端的方法

    Web文件上传采用POST的方式,与POST提交表单不同的是,上传文件需要设置FORM的enctype属性为multipart/form-data.由于上传的文件会比较大,因此需要设置该参数指定浏览器使用二进制上传.如果不设置,enctype属性默认为application/x-www-form-urlencoded,使用浏览器将使用ASCII向服务器发送数据,导致发送文件失败. 上传文件要使用文件域(<input type='file'/>,并把FORM的Enctype设置为multipar

  • Java实现文件上传至服务器的方法

    在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去. 如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些图片,文档上传到服务器上面去.然后其他用户可以去下载这些文件,那么这样的话,我们可以自己编程实现文件的上传 但是更好的方式是使用一些已有的组件帮助我们实现这种上传功能. 常用的上传组件: Apache 的 Commons FileUpload JavaZoom的UploadBean jspSmartUpload upload.jsp 代码: <%@ pag

  • java实现上传文件到服务器和客户端

    JAVA编写一个可以上传文件的服务器和客户端,具体内容如下 服务端 class Server { public static void main(String[] args) throws Exception { //建立服务端Socket ServerSocket ss = new ServerSocket(10005); //接收客户端Socket Socket fileLoaderSocket = ss.accept(); //打印连接信息 String ip = fileLoaderSo

  • Java实现跨服务器上传文件功能

    前几天做个项目,本身客户端和管理员端是写在一起的,共用一台服务器,客户上传的文件都是存在服务器的硬盘上的.老龙提出要把客户端和管理员端分离,这时候用户上传的附件的存储就出现问题了.显然,把大到几百M的apk文件存到数据库不现实,查了半天,在两端建立ftp服务器传文件是最快的方法. 具体流程是,用户登录外网客户端,上传文件到外网的服务器硬盘上,在此同时,文件通过外网服务器访问内网管理员服务器的ftp服务器,传到内网服务器的硬盘上.这样内网服务器可以对上传的文件进行加密签名工作,之后也通过ftp的方

  • Java上传文件图片到服务器的方法

    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存,具体内容如下 首先是页面html的   我这是提交一个文件和类型 <div style="border: 1px solid red;"> 我是添加一张临时图片得到微信的media_id保存数据库! <form action="xxxxxxxxm" enctype="multipart/form-data" method="post">

  • Java实现文件上传服务器和客户端

    本文实例为大家分享了Java实现文件上传服务器和客户端的具体代码,供大家参考,具体内容如下 文件上传服务器端: /** * 使用TCP协议实现上传功能的服务器端 * 思路: * 新建ServerSocket * 等待客户端连接 * 连接上后开启子线程,把连接获取的Socket传给子线程 * 循环进行 * @author yajun * */ public class UploadServer { public static void main(String[] args) { UploadSer

  • java实现客户端向服务器发送文件

    本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.In

  • java文件上传至ftp服务器的方法

    用java实现ftp文件上传.我使用的是commons-net-1.4.1.zip.其中包含了众多的java网络编程的工具包. 1.把commons-net-1.4.1.jar包加载到项目工程中去. 2.看如下代码: import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ft

  • 基于HTML5+js+Java实现单文件文件上传到服务器功能

    上传单文件到服务器       应公司要求,在HTML5页面上实现上传文件到服务器,对于一个还没毕业的实习生菜鸟来说,这可不得了-----不会,网上各种百度,找各种博客还是没解决,最后还是请教了公司的大神,人家给卸了一个例子,然后根据人家写的终于把这个上传文件搞定. 好了,开始上代码. HTML5代码: <form name="upform" action="" method="POST"> <input type ="

  • Java实现图片上传到服务器并把上传的图片读取出来

    在很多的网站都可以实现上传头像,可以选择自己喜欢的图片做头像,从本地上传,下次登录时可以直接显示出已经上传的头像,那么这个是如何实现的呢? 下面说一下我的实现过程(只是个人实现思路,实际网站怎么实现的不太清楚) 实现的思路: 工具:MySQL,eclipse 首先,在MySQL中创建了两个表,一个t_user表,用来存放用户名,密码等个人信息, 一个t_touxiang表,用来存放上传的图片在服务器中的存放路径,以及图片名字和用户ID, T_touxiang表中的用户ID对应了t_user中的i

随机推荐