java文件上传下载 使用SmartUpload组件实现
使用SmartUpload组件实现(下载jsmartcom_zh_CN.jar) 2017-11-07
1、在WebRoot创建以下文件夹,css存放样式文件(css文件直接拷贝进去),images存放图片(图片也拷贝进去),js存放js文件(拷贝),jsp存放我们的jsp文件

2、创建jsp文件 01.jsp

3、编写jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP '01.jsp' starting page</title>
<!-- 引入我们css样式文件 -->
<link rel="stylesheet" type="text/css" href="css/common.css">
<!-- 引入我们js文件 -->
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<script type="text/javascript">
/*
替换默认显示图片,显示当前我们选中的图片
1、获取<p class="thumbs">中<a>标签事件
2、获取href title
3、获取<p><img id="largeImg"</p>
4、把当前选中的href title赋给默认
*/
$(function(){
$(".thumbs a").click(function(){
var largePath = $(this).attr("href");
var largeAlt = $(this).attr("title");
$("#largeImg").attr({
src:largePath,
alt:largeAlt
});
return false;
});
}); </script>
</head> <body>
<h2>文件批量上传</h2>
<!-- 处理类路径,提交方式,类型 -->
<form action="smartUploadServlet.do" method="post" enctype="multipart/form-data">
<label>文件一:</label>
<input name="myfile1" type="file"/><br>
<label>文件二:</label>
<input name="myfile2" type="file"/><br>
<label>文件三:</label>
<input name="myfile3" type="file"/><br>
<!-- 处理完后台返回一个消息同el表达式${result} -->
<input type="submit" value="上传文件"/><b style="color: red">${result}</b>
</form>
<hr> <h2>文件批量下载</h2>
<!-- 处理类路径 -->
<form action="batchDownloadServlet.do">
<input type="checkbox" name="filename" value="img2-lg.jpg"/>Image2
<input type="checkbox" name="filename" value="img3-lg.jpg"/>Image3
<input type="checkbox" name="filename" value="img4-lg.jpg"/>Image4
<input type="submit" value="下载文件"/>
</form>
<!--
下载:<input type="file" name="filename" value="img2-lg.jpg"/>Image2
-->
<hr> <h2>图片预览</h2>
<p><img id="largeImg" alt="Large Image" src="data:images/img1-lg.jpg"></p>
<p class="thumbs">
<a href="images/img2-lg.jpg" title="Image2"><img src="data:images/img2-thumb.jpg"></a>
<a href="images/img3-lg.jpg" title="Image3"><img src="data:images/img3-thumb.jpg"></a>
<a href="images/img4-lg.jpg" title="Image4"><img src="data:images/img4-thumb.jpg"></a>
<a href="images/img5-lg.jpg" title="Image5"><img src="data:images/img5-thumb.jpg"></a>
<a href="images/img6-lg.jpg" title="Image6"><img src="data:images/img6-thumb.jpg"></a>
</p>
</body>
</html>
4、后台创建SmartUploadServlet(上传) web.xml配置路径,jsp文件中<form action="smartUploadServlet.do">必须和web.xml中一致

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>scx</display-name> <servlet>
<servlet-name>SmartUploadServlet</servlet-name>
<servlet-class>com.imooc.servlet.SmartUploadServlet</servlet-class>
</servlet> <servlet>
<servlet-name>SmartDownloadServlet</servlet-name>
<servlet-class>com.imooc.servlet.SmartDownloadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>BatchDownloadServlet</servlet-name>
<servlet-class>com.imooc.servlet.BatchDownloadServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>SmartUploadServlet</servlet-name>
<url-pattern>/smartUploadServlet.do</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>SmartDownloadServlet</servlet-name>
<url-pattern>/smartDownloadServlet.do</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>BatchDownloadServlet</servlet-name>
<url-pattern>/batchDownloadServlet.do</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
5、编写SmartUploadServlet(多个上传,单个上传只需要把jsp文件中input留下一个)
package com.imooc.servlet; import java.io.File;
import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.jspsmart.upload.SmartUpload; public class SmartUploadServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8");
// 设置上传的保存路径
String filePath = getServletContext().getRealPath("/") + "images";
// 创建文件对象 如果存在就不创建,否则创建文件夹
File file = new File(filePath);
if (file.exists()) {
file.mkdir();
}
// 创建SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化对象
su.initialize(getServletConfig(), req, resp);
// 设置上传文件大小
su.setTotalMaxFileSize(1024 * 1024 * 100);
// 设置上传文件类型
su.setAllowedFilesList("txt,jpg,gif");
// 创建提示变量
String result = "上传成功";
try {
// 设置禁止上传类型
su.setDeniedFilesList("rar,jsp,js");
su.upload();
// 返回上传文件数量
int count = su.save(filePath);
System.out.println("上传成功" + count + "个文件!"); } catch (Exception e) {
result = "上传失败";
e.printStackTrace();
} // 获取上传成功的文件的属性
for (int i = 0; i < su.getFiles().getCount(); i++) {
com.jspsmart.upload.File tempFile = su.getFiles().getFile(i);
System.out.println("---------------------");
System.out.println("表单当中name属性值:" + tempFile.getFieldName());
System.out.println("上传文件名:" + tempFile.getFieldName());
System.out.println("上传文件长度:" + tempFile.getSize());
System.out.println("上传文件的拓展名:" + tempFile.getFileExt());
System.out.println("上传文件的全名:" + tempFile.getFilePathName());
System.out.println("---------------------");
}
req.setAttribute("result", result);
req.getRequestDispatcher("jsp/01.jsp").forward(req, resp);
} } 6、SmartDownloadServlet(单个下载)
package com.imooc.servlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException; public class SmartDownloadServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取文件名称
String filename = request.getParameter("filename");
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(getServletConfig(), request, response);
// 把默认显示方式设为空
su.setContentDisposition(null); try {
su.downloadFile("/images/" + filename);
} catch (SmartUploadException e) {
e.printStackTrace();
}
}
}
7、BatchDownloadServlet(多个文件下载)
package com.imooc.servlet; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class BatchDownloadServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("application/x-msdownload");
// 以附件的形式下载
resp.setHeader("Content-Disposition", "attachment;filename=test.zip"); // 获取下载路径
String path = getServletContext().getRealPath("/") + "images/";
// 获取文件数组
String[] filenames = req.getParameterValues("filename");
// 创建空字符串
String str = "";
// 换行符
String rt = "\r\n";
// 创建压缩包输出流
ZipOutputStream zos = new ZipOutputStream(resp.getOutputStream());
// 遍历文件数组
for (String filename : filenames) {
str += filename + rt;
// 创建文件对象
File file = new File(path + filename);
zos.putNextEntry(new ZipEntry(filename));
// 创建文件输出流
FileInputStream fis = new FileInputStream(file);
byte[] b = new byte[1024];
int n = 0;
while ((n = fis.read(b)) != -1) {
zos.write(b, 0, n);
}
zos.flush();
fis.close();
}
zos.setComment("成功" + rt + str);
zos.flush();
zos.close();
}
} 效果图

java文件上传下载 使用SmartUpload组件实现的更多相关文章
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- Java文件上传下载原理
文件上传下载原理 在TCP/IP中,最早出现的文件上传机制是FTP.它是将文件由客户端发送到服务器的标准机制. 但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp运行机制所决定的 文件上传原 ...
- java文件上传下载组件
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...
- java文件上传下载
文件上传首先要引入两个核心包 commons-fileupload-1.2.1.jar commons-io-1.4.jar 下面是对文件上传和下载的一些代码做的一个简单封装,可以方便以后直接使用[使 ...
- java 文件上传 下载 总结
首先引入2个jar  String pat ...
- java文件上传下载解决方案
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
- [Java] 文件上传下载项目(详细注释)
先上代码,最上方注释是文件名称(运行时要用到) FTServer.java /* FTServer.java */ import java.util.*; import java.io.*; publ ...
- [java]文件上传下载删除与图片预览
图片预览 @GetMapping("/image") @ResponseBody public Result image(@RequestParam("imageName ...
随机推荐
- VS2015-MFC基础教程-应用程序工程中文件的组成结构
VS2015应用程序向导生成框架程序后,我们可以在之前设置的Location下看到此文件夹中包含了几个文件和一个以工程名命名的子文件夹,这个子文件夹中又包含了若干个文件和一个res文件夹,创建工程时的 ...
- vue访问外部接口设置代理,解决跨域(vue-cli3.0)
vue-cli3.0搭建的项目,平时访问内部接口配置了拦截器,今天需要调用天气预报的外部接口,发现跨域问题,通过配置代理解决. 1.在vue.config.js中配置代理 module.exports ...
- vue路由的两种模式配置以及history模式下面后端如何配置
vue路由的两种模式配置以及history模式下面后端如何配置 1.hash ——即地址栏URL中的#符号.hash 虽然出现URL中,但不会被包含在HTTP请求中,对后端完全没有影响,因此改变has ...
- python Opencv图像基础操作
读取并显示图像 如果读取图像首先要导入OpenCV包,方法为: import cv2 读取并显示图像 img = cv2.imread("C:\test1.jpg") OpenCV ...
- iOS App中 使用 OpenSSL 库
转自:http://blog.csdn.net/kmyhy/article/details/6534067 在你的 iOS App中 使用 OpenSSL 库 ——译自x2on的“Tutorial: ...
- python __str__repr__ 区别
__str__ __repr__ 两个内置函数都是调试常用的函数, 对象直接调用时会调用 __repr__的内容, __str__需要print一下对象才可以 两个函数的内容有时会写成相同内容 _ ...
- linux针对TCP和 UDP的调优
- [Luogu1436]棋盘分割(动态规划)
[Luogu1436]棋盘分割 题目背景 无 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后, ...
- Redis 复制原理及特性
摘要 早期的RDBMS被设计为运行在单个CPU之上,读写操作都由经单个数据库实例完成,复制技术使得数据库的读写操作可以分散在运行于不同CPU之上的独立服务器上,Redis作为一个开源的.优秀的key- ...
- PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患(转)
PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患 时间 2014-11-14 15:05:49 WooYun知识库 原文 http://drops.wooyun.org/t ...