一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java文件上傳下載、郵件收發實例代碼

Java文件上傳下載、郵件收發實例代碼

2020-05-14 10:33guanhang89 Java教程

這篇文章主要介紹了Java文件上傳下載、郵件收發實例代碼的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下

文件上傳下載

前臺:

1. 提交方式:post

2. 表單中有文件上傳的表單項: <input type=”file” />

3. 指定表單類型:

默認類型:enctype="application/x-www-form-urlencoded"
文件上傳類型:multipart/form-data

FileUpload

文件上傳功能開發中比較常用,apache也提供了文件上傳組件!
FileUpload組件:

1. 下載源碼

2. 項目中引入jar文件

commons-fileupload-1.2.1.jar 【文件上傳組件核心jar包】
commons-io-1.4.jar 【封裝了對文件處理的相關工具類】

使用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
public class UploadServlet extends HttpServlet {
// upload目錄,保存上傳的資源
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*********文件上傳組件: 處理文件上傳************/
try {
// 1. 文件上傳工廠
FileItemFactory factory = new DiskFileItemFactory();
// 2. 創建文件上傳核心工具類
ServletFileUpload upload = new ServletFileUpload(factory);
// 一、設置單個文件允許的最大的大小: 30M
upload.setFileSizeMax(30*1024*1024);
// 二、設置文件上傳表單允許的總大小: 80M
upload.setSizeMax(80*1024*1024);
// 三、 設置上傳表單文件名的編碼
// 相當于:request.setCharacterEncoding("UTF-8");
upload.setHeaderEncoding("UTF-8");
// 3. 判斷: 當前表單是否為文件上傳表單
if (upload.isMultipartContent(request)){
// 4. 把請求數據轉換為一個個FileItem對象,再用集合封裝
List<FileItem> list = upload.parseRequest(request);
// 遍歷: 得到每一個上傳的數據
for (FileItem item: list){
// 判斷:普通文本數據
if (item.isFormField()){
// 普通文本數據
String fieldName = item.getFieldName(); // 表單元素名稱
String content = item.getString(); // 表單元素名稱, 對應的數據
//item.getString("UTF-8"); 指定編碼
System.out.println(fieldName + " " + content);
}
// 上傳文件(文件流) ----> 上傳到upload目錄下
else {
// 普通文本數據
String fieldName = item.getFieldName(); // 表單元素名稱
String name = item.getName(); // 文件名
String content = item.getString(); // 表單元素名稱, 對應的數據
String type = item.getContentType(); // 文件類型
InputStream in = item.getInputStream(); // 上傳文件流
/*
* 四、文件名重名
* 對于不同用戶readme.txt文件,不希望覆蓋!
* 后臺處理: 給用戶添加一個唯一標記!
*/
// a. 隨機生成一個唯一標記
String id = UUID.randomUUID().toString();
// b. 與文件名拼接
name = id +"#"+ name;
// 獲取上傳基路徑
String path = getServletContext().getRealPath("/upload");
// 創建目標文件
File file = new File(path,name);
// 工具類,文件上傳
item.write(file);
item.delete(); //刪除系統產生的臨時文件
System.out.println();
}
}
}
else {
System.out.println("當前表單不是文件上傳表單,處理失敗!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 手動實現過程
private void upload(HttpServletRequest request) throws IOException,
UnsupportedEncodingException {
/*
request.getParameter(""); // GET/POST
request.getQueryString(); // 獲取GET提交的數據
request.getInputStream(); // 獲取post提交的數據 */
/***********手動獲取文件上傳表單數據************/
//1. 獲取表單數據流
InputStream in = request.getInputStream();
//2. 轉換流
InputStreamReader inStream = new InputStreamReader(in, "UTF-8");
//3. 緩沖流
BufferedReader reader = new BufferedReader(inStream);
// 輸出數據
String str = null;
while ((str = reader.readLine()) != null) {
System.out.println(str);
}
// 關閉
reader.close();
inStream.close();
in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}

案例:

Index.jsp

?
1
2
3
4
<body>
<a href="${pageContext.request.contextPath }/upload.jsp">文件上傳</a>    
<a href="${pageContext.request.contextPath }/fileServlet?method=downList">文件下載</a>
</body>

Upload.jsp

?
1
2
3
4
5
6
7
8
<body>
<form name="frm_test" action="${pageContext.request.contextPath }/fileServlet?method=upload" method="post" enctype="multipart/form-data">
<%--<input type="hidden" name="method" value="upload">--%>
用戶名:<input type="text" name="userName"> <br/>
文件: <input type="file" name="file_img"> <br/>
<input type="submit" value="提交">
</form>
</body>

FileServlet.Java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/**
* 處理文件上傳與下載
* @author Jie.Yuan
*
*/
public class FileServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 獲取請求參數: 區分不同的操作類型
String method = request.getParameter("method");
if ("upload".equals(method)) {
// 上傳
upload(request,response);
}
else if ("downList".equals(method)) {
// 進入下載列表
downList(request,response);
}
else if ("down".equals(method)) {
// 下載
down(request,response);
}
}
/**
* 1. 上傳
*/
private void upload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 1. 創建工廠對象
FileItemFactory factory = new DiskFileItemFactory();
// 2. 文件上傳核心工具類
ServletFileUpload upload = new ServletFileUpload(factory);
// 設置大小限制參數
upload.setFileSizeMax(10*1024*1024); // 單個文件大小限制
upload.setSizeMax(50*1024*1024); // 總文件大小限制
upload.setHeaderEncoding("UTF-8"); // 對中文文件編碼處理
// 判斷
if (upload.isMultipartContent(request)) {
// 3. 把請求數據轉換為list集合
List<FileItem> list = upload.parseRequest(request);
// 遍歷
for (FileItem item : list){
// 判斷:普通文本數據
if (item.isFormField()){
// 獲取名稱
String name = item.getFieldName();
// 獲取值
String value = item.getString();
System.out.println(value);
}
// 文件表單項
else {
/******** 文件上傳 ***********/
// a. 獲取文件名稱
String name = item.getName();
// ----處理上傳文件名重名問題----
// a1. 先得到唯一標記
String id = UUID.randomUUID().toString();
// a2. 拼接文件名
name = id + "#" + name;
// b. 得到上傳目錄
String basePath = getServletContext().getRealPath("/upload");
// c. 創建要上傳的文件對象
File file = new File(basePath,name);
// d. 上傳
item.write(file);
item.delete(); // 刪除組件運行時產生的臨時文件
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 2. 進入下載列表
*/
private void downList(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 實現思路:先獲取upload目錄下所有文件的文件名,再保存;跳轉到down.jsp列表展示
//1. 初始化map集合Map<包含唯一標記的文件名, 簡短文件名> ;
Map<String,String> fileNames = new HashMap<String,String>();
//2. 獲取上傳目錄,及其下所有的文件的文件名
String bathPath = getServletContext().getRealPath("/upload");
// 目錄
File file = new File(bathPath);
// 目錄下,所有文件名
String list[] = file.list();
// 遍歷,封裝
if (list != null && list.length > 0){
for (int i=0; i<list.length; i++){
// 全名
String fileName = list[i];
// 短名
String shortName = fileName.substring(fileName.lastIndexOf("#")+1);
// 封裝
fileNames.put(fileName, shortName);
}
}
// 3. 保存到request域
request.setAttribute("fileNames", fileNames);
// 4. 轉發
request.getRequestDispatcher("/downlist.jsp").forward(request, response);
}
/**
* 3. 處理下載
*/
private void down(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 獲取用戶下載的文件名稱(url地址后追加數據,get)
String fileName = request.getParameter("fileName");
fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
// 先獲取上傳目錄路徑
String basePath = getServletContext().getRealPath("/upload");
// 獲取一個文件流
InputStream in = new FileInputStream(new File(basePath,fileName));
// 如果文件名是中文,需要進行url編碼
fileName = URLEncoder.encode(fileName, "UTF-8");
// 設置下載的響應頭
response.setHeader("content-disposition", "attachment;fileName=" + fileName);
// 獲取response字節流
OutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
int len = -1;
while ((len = in.read(b)) != -1){
out.write(b, 0, len);
}
// 關閉
out.close();
in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}

郵件開發

準備工作, 環境搭建:

1. 本地搭建一個郵件服務器

易郵服務器,eyoumailserversetup.exe

2. 新建郵箱賬號

張三給李四發郵件。

步驟1:

新建域名: 工具, 服務器設置, 單域名框中輸入 itcast.com

步驟2:

新建郵箱賬號: [email protected]

[email protected]

3. 安裝foxmail

配置郵件發送服務器(smtp): localhost 25
郵件接收服務器(pop3): localhost 110

再新建賬號,就可以接收郵件了!

注意

注意

如果是web項目,因為javaee自帶的有郵件功能,可能存在問題!

我們要用自己的mail.jar文件功能! 需要刪除javaee中mail包!

使用:

JavaMail開發,先引入jar文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
activation.jar 【如果使用jdk1.6或以上版本,可以不用這個jar文件】
mail.jar 【郵件發送核心包】
/**
* 1. 發送一封普通郵件
* @author Jie.Yuan
*
*/
public class App_SendMail {
@Test
public void testSend() throws Exception {
//0. 郵件參數
Properties prop = new Properties();
prop.put("mail.transport.protocol", "smtp"); // 指定協議
prop.put("mail.smtp.host", "localhost"); // 主機 stmp.qq.com
prop.put("mail.smtp.port", 25); // 端口
prop.put("mail.smtp.auth", "true"); // 用戶密碼認證
prop.put("mail.debug", "true"); // 調試模式
//1. 創建一個郵件的會話
Session session = Session.getDefaultInstance(prop);
//2. 創建郵件體對象 (整封郵件對象)
MimeMessage message = new MimeMessage(session);
//3. 設置郵件體參數:
//3.1 標題
message.setSubject("我的第一封郵件 ");
//3.2 郵件發送時間
message.setSentDate(new Date());
//3.3 發件人
message.setSender(new InternetAddress("[email protected]"));
//3.4 接收人
message.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
//3.5內容
message.setText("你好,已經發送成功! 正文...."); // 簡單純文本郵件
message.saveChanges(); // 保存郵件(可選)
//4. 發送
Transport trans = session.getTransport();
trans.connect("zhangsan", "888");
// 發送郵件
trans.sendMessage(message, message.getAllRecipients());
trans.close();
}
}

帶圖片

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
* 帶圖片資源的郵件
* @author Jie.Yuan
*
*/
public class App_2SendWithImg {
// 初始化參數
private static Properties prop;
// 發件人
private static InternetAddress sendMan = null;
static {
prop = new Properties();
prop.put("mail.transport.protocol", "smtp"); // 指定協議
prop.put("mail.smtp.host", "localhost"); // 主機 stmp.qq.com
prop.put("mail.smtp.port", 25); // 端口
prop.put("mail.smtp.auth", "true"); // 用戶密碼認證
prop.put("mail.debug", "true"); // 調試模式
try {
sendMan = new InternetAddress("[email protected]");
} catch (AddressException e) {
throw new RuntimeException(e);
}
}
@Test
public void testSend() throws Exception {
// 1. 創建郵件會話
Session session = Session.getDefaultInstance(prop);
// 2. 創建郵件對象
MimeMessage message = new MimeMessage(session);
// 3. 設置參數:標題、發件人、收件人、發送時間、內容
message.setSubject("帶圖片郵件");
message.setSender(sendMan);
message.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
message.setSentDate(new Date());
/***************設置郵件內容: 多功能用戶郵件 (related)*******************/
// 4.1 構建一個多功能郵件塊
MimeMultipart related = new MimeMultipart("related");
// 4.2 構建多功能郵件塊內容 = 左側文本 + 右側圖片資源
MimeBodyPart content = new MimeBodyPart();
MimeBodyPart resource = new MimeBodyPart();
// 設置具體內容: a.資源(圖片)
String filePath = App_2SendWithImg.class.getResource("8.jpg").getPath();
DataSource ds = new FileDataSource(new File(filePath));
DataHandler handler = new DataHandler(ds);
resource.setDataHandler(handler);
resource.setContentID("8.jpg"); // 設置資源名稱,給外鍵引用
// 設置具體內容: b.文本
content.setContent("<img src='cid:8.jpg'/> 好哈哈!", "text/html;charset=UTF-8");
related.addBodyPart(content);
related.addBodyPart(resource);
/*******4.3 把構建的復雜郵件快,添加到郵件中********/
message.setContent(related);
 
// 5. 發送
Transport trans = session.getTransport();
trans.connect("zhangsan", "888");
trans.sendMessage(message, message.getAllRecipients());
trans.close();
}
}

圖片+附件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/**
* 3. 帶圖片資源以及附件的郵件
* @author Jie.Yuan
*
*/
public class App_3ImgAndAtta {
// 初始化參數
private static Properties prop;
// 發件人
private static InternetAddress sendMan = null;
static {
prop = new Properties();
prop.put("mail.transport.protocol", "smtp"); // 指定協議
prop.put("mail.smtp.host", "localhost"); // 主機 stmp.qq.com
prop.put("mail.smtp.port", 25); // 端口
prop.put("mail.smtp.auth", "true"); // 用戶密碼認證
prop.put("mail.debug", "true"); // 調試模式
try {
sendMan = new InternetAddress("[email protected]");
} catch (AddressException e) {
throw new RuntimeException(e);
}
}
@Test
public void testSend() throws Exception {
// 1. 創建郵件會話
Session session = Session.getDefaultInstance(prop);
// 2. 創建郵件對象
MimeMessage message = new MimeMessage(session);
// 3. 設置參數:標題、發件人、收件人、發送時間、內容
message.setSubject("帶圖片郵件");
message.setSender(sendMan);
message.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
message.setSentDate(new Date());
/*
* 帶附件(圖片)郵件開發
*/
// 構建一個總的郵件塊
MimeMultipart mixed = new MimeMultipart("mixed");
// ---> 總郵件快,設置到郵件對象中
message.setContent(mixed);
// 左側: (文本+圖片資源)
MimeBodyPart left = new MimeBodyPart();
// 右側: 附件
MimeBodyPart right = new MimeBodyPart();
// 設置到總郵件塊
mixed.addBodyPart(left);
mixed.addBodyPart(right);
/******附件********/
String attr_path = this.getClass().getResource("a.docx").getPath();
DataSource attr_ds = new FileDataSource(new File(attr_path));
DataHandler attr_handler = new DataHandler(attr_ds);
right.setDataHandler(attr_handler);
right.setFileName("a.docx");
/***************設置郵件內容: 多功能用戶郵件 (related)*******************/
// 4.1 構建一個多功能郵件塊
MimeMultipart related = new MimeMultipart("related");
// ----> 設置到總郵件快的左側中
left.setContent(related);
// 4.2 構建多功能郵件塊內容 = 左側文本 + 右側圖片資源
MimeBodyPart content = new MimeBodyPart();
MimeBodyPart resource = new MimeBodyPart();
// 設置具體內容: a.資源(圖片)
String filePath = App_3ImgAndAtta.class.getResource("8.jpg").getPath();
DataSource ds = new FileDataSource(new File(filePath));
DataHandler handler = new DataHandler(ds);
resource.setDataHandler(handler);
resource.setContentID("8.jpg"); // 設置資源名稱,給外鍵引用
// 設置具體內容: b.文本
content.setContent("<img src='cid:8.jpg'/> 好哈哈!", "text/html;charset=UTF-8");
related.addBodyPart(content);
related.addBodyPart(resource);
// 5. 發送
Transport trans = session.getTransport();
trans.connect("zhangsan", "888");
trans.sendMessage(message, message.getAllRecipients());
trans.close();
}
}

以上所述是小編給大家介紹的Java文件上傳下載、郵件收發實例代碼 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产成人a区在线观看 精品高潮呻吟99AV无码视频 | 男男双性生子产乳高辣h | 日本福利网 | 变形金刚第一部 | 国产我不卡 | chinesexxxxhd人妖 chinesespanking调教 | 日韩国产欧美一区二区三区 | 亚洲精品成人 | 四虎网址 | 日本护士撒尿xxxxhd | 免费理伦片高清在线 | 亚洲精品视频导航 | 美女的让男生桶 | 91制片厂制作传媒网站破解 | a级动漫| 国产一级在线免费观看 | h片免费网站 | 扒开老师挠尿口到崩溃刑罚 | 国产成人高清视频 | 国内免费高清视频在线观看 | 午夜在线观看免费观看 视频 | 插美女b | 日韩欧美不卡视频 | 久久精品视频uu | 97秋霞| www一级片 | 成人性爱视频在线观看 | 美女和男人差差 | 亚洲swag精品自拍一区 | sss视频在线精品 | 国产精品人人视频 | 亚洲国产精品综合一区在线 | 午夜伦伦电影理论片费看 | 高h短篇辣肉各种姿势bl | 魔法满屋免费观看完整版中文 | 欧美老人与小伙子性生交 | 午夜私人福利影院 | 91制片厂果冻传媒杨柳作品 | 色婷婷天天综合在线 | 91tv破解版不限次数 | 999久久免费高清热精品 |