验证中...
码云 IDEA 插件最新版本发布,支持 Pull Request
片段 1 片段 2 片段 3 片段 4
1、使用form表单提交
原始数据 复制代码
<form action="/api/fileupload/dome1" id="domeform" method="post" enctype="multipart/form-data">
<input type="file" name="file" value="选择文件">
<input type="submit" value="表单提交">
<input type="button" value="ajax提交" id="ajaxsub">
<input type="button" value="formdata提交" id="ormdatasub">
</form>
2、使用ajax提交文件-----使用ajax提交首先引入jquery-form.js文件才能实现
原始数据 复制代码
< script type = "text/javascript" > $(function() {
$("#ajaxsub").click(function() {
$("#domeform").ajaxSubmit({
url: "/api/fileupload/dome1",
type: "POST",
dataType: "json",
success: function(res) { //处理成功后的业务逻辑
}
})
})
}) < /script>/
3、使用FormData对象
原始数据 复制代码
$("#ormdatasub").click(function() {
var formdata = new FormData($("#domeform")[0]);
$.ajax({
url: "/api/fileupload/dome1",
type: "POST",
data: formdata,
dataType: "json",
processData: false, // 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
success: function(res) {}
})
})
后台处理
原始数据 复制代码
1、实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload的一些基本设定。
DiskFileItemFactory dfif = new DiskFileItemFactory();
// 定义文件上传时的“运输船”大小。文件是一部分一部分上传的,这里设置为4K。当数据读取到4K则写入硬盘的临时文件夹中,清空运输船继续读取。
//文件传输完后,再从临时文件夹转存到实际的保存路径下
dfif.setSizeThreshold(4096);
// 设置存放临时文件的目录如下:获取完整路径——修改路径新建临时文件夹——把临时文件夹设为工厂的默认目录(则工厂获取的内容会默认存放在这里)
String realwebbase = request.getSession().getServletContext().getRealPath("/");
File temp_file = new File(realwebbase + "/upload/UploadTemp");
if (!temp_file.exists()) {
temp_file.mkdirs();
}
dfif.setRepository(temp_file);
ServletFileUpload sfu = new ServletFileUpload(dfif);
sfu.setHeaderEncoding("UTF-8");
// 设置上传文件的最大容量
sfu.setSizeMax(MAX_SIZE);
2.从request中取出文件并遍历
List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch(FileUploadException e) {
}
Iterator fileItr = fileList.iterator();
while (fileItr.hasNext()) {
FileItem fileItem = (FileItem) fileItr.next();
if (fileItem.isFormField()) { //第一种上传内容:普通文本,分别获取键名、值内容即可
String name = fileItem.getFieldName(); //获取键值对的键名
String value = fileItem.getString("UTF-8"); //此处的getString()是指对list的当前元素(键值对)的值,按照参数所指定的解码方式进行解析、获取内容
} else { //第二种上传内容:非文本,则需要用到流传输来把内容读取、保存到具体的路径下
String path = fileItem.getName(); //获取文件的路径名,用于截取扩展名进行文件类型的判断// 得到文件的大小,用于判断文件大小是否合法
long size = fileItem.getSize();
if ("".equals(path) || size == 0) {
out.println("上传的文件无效!");
out.close();
return;
}
// 得到去除路径的文件名
String t_name = path.substring(path.lastIndexOf("/") + 1);
// 得到文件的扩展名(无扩展名时将得到全名)
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
//遍历允许的扩展名数组,看看上传文件的扩展名是否合法。
int i = 0;       boolean errorflag = true;
while (i < allowedExt.length) {
if (allowedExt[i].equals(t_ext)) {            errorflag = false;
break;
}
i = i + 1;
}
if (errorflag) {
out.println("请上传合法文件!");
out.close();
return;
}
// 用uuid+日期作为文件名的一部分来唯一标识文件
String uuid = UUID.randomUUID().toString();
String today = new SimpleDateFormat("yyyyMMdd").format(new Date());
//生成最终的文件保存完整路径:目录路径+日期+UUID+ . +扩展名
String u_name = realwebbase + "/upload/Uploaded/" + today + "/" + uuid + "." + t_ext;
try {
File _today_file = new File(realwebbase + "/upload/Uploaded/" + today + "/"); //构建文件目录
if (!_today_file.exists()) {
_today_file.mkdirs();
}
fileItem.write(new File(u_name)); //把当前list元素的值用write流写到创建好的路径下,即实现文件内容的保存了return;
} catch(Exception e) {
e.printStackTrace();
}

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助