java实现多文件上传至本地服务器功能
作者:程序员阿坤 发布时间:2022-01-26 11:55:24
标签: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上传操作技巧汇总》,欢迎大家学习阅读。
来源:http://blog.csdn.net/KKKun_Joe/article/details/78338552


猜你喜欢
- 1、下载SpringMVC框架架包,下载地址: 点击下载 点击打开地址如图所示,点击下载即可 然后把相关的jar复制到lib下导
- 说明Flutter原生是没有支持数据库操作的,它使用SQLlit插件来使应用具有使用数据库的能力。其实就是Flutter通过插件来与原生系统
- 知乎的广告效果一直想写,无奈最近才有时间。先看效果:肯定要自定义view了,一个类似imageView的控件,还要给它一个值用来指定广告图片
- 服务降级服务压力剧增的时候,根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚
- 面试题1:你了解线程池么?简单介绍一下。java提供的一个java.util.concurrent.Executor接口的实现用于创建线程池
- 一、前言最近做的项目由于引入第三方库导致在运行mvn clean package 打jar时,编译出来的 Jar 包很大(服务器多达500M
- 本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下import java.io.File;import
- // 获取国家省市区信息$(document).ready(function(){//从程序
- 1:在很多APP里点击返回键,都可以看到返回键由亮变为暗2:实现方法也是很简单的(1)新建一个页面<RelativeLayout &n
- android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言。package com.example.android
- 前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分。1. 数据库建表并映射Model首先我们在数据库中新建一张表,然后使用
- 前言本节将介绍如何设置和使用MongoDB 驱动程序,通过 java实现与MongoDB服务端的通信功能,用户可以在此基础上进行各种Java
- 前言本文主要给大家介绍了关于Spring Boot应用极速部署脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
- 1>方法一之前在配置 Maven 的 settings.xml 时,都会设置 mirror 节点,例如:<mirrors>
- 第一个为大家介绍图片如何转高斯模拟:1.方法的实现:public static void updateBgToBlur(Activity a
- 投影(Projection) 是一种可以将查询结果进行 塑性 的一种操作,你可以使用 投影 将一个 object 转成仅包含你需要属性的新对
- 使用unity制作瞄准镜,供大家参考,具体内容如下一、创建场景在Hierarchy窗口中使用Plane和Cube创建场景,并调整摄像机位置二
- 目录前言导入okhttp3方法简介两种版本超时设置用法总结前言okhttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支
- 1、unity的脚本模板新版本unity中的C#脚本有三类,第一类是我们平时开发用的C# Script;第二类是Testing,用来做单元测
- (一)首先说Unity调用页面方法的办法。首先是需要在工程的Asset目录里面建一个Plugins文件夹,然后在文件夹里面创建一个.txt文