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

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java Socket+mysql實現簡易文件上傳器的代碼

Java Socket+mysql實現簡易文件上傳器的代碼

2020-06-27 13:15PettyKoKo JAVA教程

最近在做一個小項目,項目主要需求是實現一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務器的數據庫(本地的)。下面通過本文給大家分享下實現代碼,感興趣的朋友一起看看吧

最近跟著某網站學習了一個小項目,因為白天有課,所以都是晚上寫的,今天把它完成了。

項目主要是實現一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務器的數據庫(本地的)。

首先建兩個表如下:

一個文件信息表

?
1
2
3
4
5
6
CREATE TABLE `fileinfo` (
`Fname` char(50) NOT NULL,
`FInfo` blob NOT NULL,
`FId` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`FId`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

一個用戶信息表

?
1
2
3
4
5
6
CREATE TABLE `user` (
`username` char(25) NOT NULL,
`password` char(25) NOT NULL,
`useid` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`useid`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

User類

?
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
package fileUpload;
import java.io.Serializable;
/*
* 用戶實體類
*/
public class User implements Serializable{
private static final long serialVersionUID = -7279093338433393181L;
private int useid;//用戶編號
private String usename;//用戶名
private String usepsd;//用戶密碼
public User(){
}
public User(String usename,String usepsd){
super();
this.usename = usename;
this.usepsd = usepsd;
}
public User(int useid,String usename,String usepsd){
super();
this.useid = useid;
this.usename = usename;
this.usepsd = usepsd;
}
public int getUseid() {
return useid;
}
public void setUseid(int useid) {
this.useid = useid;
}
public String getUsename() {
return usename;
}
public void setUsename(String usename) {
this.usename = usename;
}
public String getUsepsd() {
return usepsd;
}
public void setUsepsd(String usepsd) {
this.usepsd = usepsd;
}
}

UserService類

?
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
package fileUpload;
/**
* 用戶登陸與注冊操作類
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserService {
private Connection conn = null;
private PreparedStatement ptmt = null;
private ResultSet rs = null;
// 用戶登錄
public boolean login(User user) {
String url = "jdbc:mysql://localhost:3306/fileupload";// 數據庫連接字符串
String sql = "select * from user where username=? and password=?";
try {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(url, "root", "1995520");
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, user.getUsename());
ptmt.setString(2, user.getUsepsd());
rs = ptmt.executeQuery();
if (rs.next()) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
ptmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
//用戶注冊
public boolean register(User user){
System.out.println("hello");
String url = "jdbc:mysql://localhost:3306/fileupload";// 數據庫連接字符串
String sql = "insert into user(username,password) values (?,?)";
try {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(url, "root", "1995520");
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, user.getUsename());
ptmt.setString(2, user.getUsepsd());
ptmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
try {
//rs.close();
ptmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return true;
}
}

FileIofo類

?
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
package fileUpload;
import java.io.Serializable;
/*
* 文件實體類
*/
public class FileInfo implements Serializable{
private static final long serialVersionUID = 2554622626228481455L;
private int fid;//文件編號
private String fname;//文件名
private byte[] fcontent;//文件內容
public FileInfo(){
}
public FileInfo(String fname,byte[] fcontent){
super();
this.fname = fname;
this.fcontent = fcontent;
}
public FileInfo(int fid,String fname,byte[] fcontent){
super();
this.fid = fid;
this.fname = fname;
this.fcontent = fcontent;
}
public int getFid() {
return fid;
}
public void setFid(int fid) {
this.fid = fid;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public byte[] getFcontent() {
return fcontent;
}
public void setFcontent(byte[] fcontent) {
this.fcontent = fcontent;
}
}

FileService類

?
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
package fileUpload;
/**
* 文件上傳操作類
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class FileService {
private Connection conn = null;
private PreparedStatement ptmt = null;
//將文件保存到數據庫中
public boolean save(FileInfo file){
String url = "jdbc:mysql://localhost:3306/fileupload";//數據庫連接字符串
String sql = "insert into fileinfo(Fname,Finfo) value (?,?)";
try{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(url, "root", "1995520");
ptmt = conn.prepareStatement(sql);
ptmt.setString(1, file.getFname());
ptmt.setBytes(2,file.getFcontent());
ptmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
return false;
}finally{
try {
ptmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return true;
}
}

package fileUpload;

?
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
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 啟動服務器類
*/
public class StartServer {
@SuppressWarnings("resource")
public static void main(String[] args){
try {
// 1.創建一個服務器端Socket,即ServerSocket,指定綁定的端口,并監聽此端口
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = null;
System.out.println("服務器已啟動,等待客戶端的連接...");
//循環監聽等待客戶端的連接
while (true) {
// 2.調用accept()方法開始監聽,等待客戶端的連接
socket = serverSocket.accept();
//創建一個新的線程
ServerThread serverThread = new ServerThread(socket);
//啟動線程
serverThread.start();
}
} catch (IOException e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
}
}
[java] view plain copy 在CODE上查看代碼片派生到我的代碼片
package fileUpload;
import java.io.IOException;
/**
* 啟動客戶端類
*/
public class StartClient {
public static void main(String[] args) throws IOException{
SocketClient client = new SocketClient();
client.showMainMenu();//顯示主菜單
}
}

package fileUpload;

?
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import javax.swing.JOptionPane;
/*
* 服務器端多線程處理類
*/
public class ServerThread extends Thread {
static Socket socket = null;
private static ObjectInputStream ois = null;// 對象輸入流
private ObjectOutputStream oos = null;// 對象輸出流
private UserService us = new UserService();// 用戶業務對象
private FileService fs = new FileService();// 文件業務對象
// 通過構造方法,初始化socket
public ServerThread(Socket socket) {
ServerThread.socket = socket;
}
public void run() {
try {
ois = new ObjectInputStream(socket.getInputStream());//接收客戶端發來的消息
oos = new ObjectOutputStream(socket.getOutputStream());//用來向客戶端發送消息
CommandTransfer transfer = (CommandTransfer) ois.readObject(); // 讀取客戶端發送到服務器的指令操作
transfer = execute(transfer); // 執行客戶端送到服務器的指令操作
oos.writeObject(transfer);// 響應客戶端
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
/*
* 執行客戶端發送到服務器的指令操作
*/
private CommandTransfer execute(CommandTransfer transfer) {
String cmd = transfer.getCmd();// 獲取當前操作的指令
if (cmd.equals("login")) { // 用戶登錄
User user =(User)transfer.getData();
boolean flag = us.login(user);
if(flag)
JOptionPane.showMessageDialog(null, "登陸成功!");
transfer.setFlag(flag);
if(flag){//判斷登陸是否成功
transfer.setResult("登陸成功!");
}else{
transfer.setResult("用戶名或密碼不正確,請重新登陸!");
}
}else if(cmd.equals("register")){//用戶注冊
User user = (User) transfer.getData();
us.register(user);//注冊用戶
boolean flag = us.register(user);
if(flag)
JOptionPane.showMessageDialog(null, "注冊成功!");
transfer.setFlag(flag);
if(flag){
transfer.setResult("注冊成功!");
}else{
transfer.setResult("注冊失敗!");
}
}else if(cmd.equals("uploadFile")){
FileInfo file =(FileInfo)transfer.getData();
fs.save(file);
boolean flag = fs.save(file);
if(flag)
JOptionPane.showMessageDialog(null, "上傳成功!");
transfer.setFlag(flag);
if(flag){
transfer.setResult("上傳成功!");
}else{
transfer.setResult("上傳失敗!");
}
}
return transfer;
}
}
package fileUpload;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* 主菜單類
*/
public class SocketClient {
Scanner input = new Scanner(System.in);
private static Socket socket = null;// 客戶端Socket
// 主菜單
public void showMainMenu() throws IOException {
System.out.println("******歡迎使用xx文件上傳器******");
System.out.println("1.登錄\n2.注冊\n3.退出");
System.out.println("****************************");
System.out.println("請選擇:");
int choice = input.nextInt();// 獲取用戶的選擇
socket = new Socket("localhost", 8888);
switch (choice) {
case 1:
showLogin();// 登錄
break;
case 2:
showRegister();// 注冊
break;
case 3:
System.out.println("歡迎你對本系統的支持");
System.exit(0);
default:
System.out.println("輸入有誤!");
System.exit(0);
}
}
// 用戶注冊
private void showRegister() throws IOException {
User user = new User();
CommandTransfer transfer = new CommandTransfer();
int count = 0;// 登陸次數
while (true) {
count++;
if (count > 3) {
System.out.println("你已連續3次登陸失敗,程序退出!");
System.exit(0);
}
System.out.print("請輸入用戶名:");
user.setUsename(input.next());
System.out.print("請輸入密碼:");
user.setUsepsd(input.next());
System.out.print("請再次輸入密碼:");
String rePassword = input.next();
if (!user.getUsepsd().equals(rePassword)) {
System.out.println("兩次輸入的密碼不一致!");
System.out.println("**********************");
continue;
}
transfer.setCmd("register");
transfer.setData(user);
try {
sendData(transfer);// 將數據發送到服務器
transfer = getData();// 獲取服務器返回的數據
System.out.println(transfer.getResult());// 輸出顯示結果
System.out.println("*****************************");
if (transfer.isFlag()) {
break;// 如果注冊成功,則不再重復執行注冊
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
showLogin();// 注冊成功后顯示登陸
}
// 獲得服務器的數據
public static CommandTransfer getData() throws IOException {
// TODO Auto-generated method stub
ObjectInputStream ois = null;
CommandTransfer res = null;
try {
if(socket.isClosed())
socket = new Socket("localhost", 8888);
ois = new ObjectInputStream(socket.getInputStream());
res = (CommandTransfer) ois.readObject();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (ois != null) {
try {
ois.close();
//socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return res;
}
/*
* 上傳文件
*/
private void showUploadFile() throws IOException {
System.out.println("請輸入上傳文件的絕對路徑:");
String path = input.next();
FileInfo file = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
String fname = path.substring(path.lastIndexOf("/") + 1);
try {
fis = new FileInputStream(path);
byte[] fcontent = new byte[fis.available()];
bis = new BufferedInputStream(fis);
bis.read(fcontent);
file = new FileInfo(fname, fcontent);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
bis.close();
fis.close();
}
CommandTransfer transfer = new CommandTransfer();
transfer.setCmd("uploadFile");
transfer.setData(file);
try {
sendData(transfer);// 將數據發送到服務器
transfer = getData();// 獲取服務器返回的數據
System.out.println(transfer.getResult());// 輸出顯示結果
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
// 向服務器發送數據
public static void sendData(CommandTransfer cmd) throws IOException {
// TODO Auto-generated method stub
ObjectOutputStream oos = null;
try {
if(socket.isClosed())//判斷socket是否被關閉,如果關閉,就打開
socket = new Socket("localhost", 8888);
oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(cmd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 用戶登陸
private void showLogin() throws IOException {
User user = new User();
CommandTransfer transfer = new CommandTransfer();
while (true) {
System.out.print("請輸入用戶名:");
user.setUsename(input.next());
System.out.print("請輸入密碼:");
user.setUsepsd(input.next());
transfer.setCmd("login");
transfer.setData(user);
try {
sendData(transfer);// 將數據發送到服務器
transfer = getData();// 獲取服務器返回的數據
System.out.println(transfer.getResult());// 輸出顯示結果
System.out.println("*****************************");
if (transfer.isFlag()) {
break;// 如果注冊成功,則不再重復執行注冊
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
showUploadFile();// 登陸成功后進行文件的上傳
}
}

運行效果圖如下:

Java Socket+mysql實現簡易文件上傳器的代碼

Java Socket+mysql實現簡易文件上傳器的代碼

文件已保存到數據庫中了,這個項目對于想練練Socket通信和mysql的朋友來說,還是挺不錯的。

以上所述是小編給大家介紹的Java Socket+mysql實現簡易文件上傳器,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/qq_31028891/article/details/52928045

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产aⅴ一区二区三区 | 日本在线www | 午夜神器18以下不能进免费 | 国产成人无精品久久久久国语 | 欧美人禽杂交在线视频 | 九九精品99久久久香蕉 | 超h高h肉h文武侠 | chinses台湾男同志hd | aaa一级特黄| 91色爱 | tube69xxxxhd日本| 欧美撒尿屁股嘘嘘撒尿 | 亚洲国产精品网站久久 | 丰满岳乱妇在线观看视频国产 | 日本在线小视频 | 日本三级做a全过程在线观看 | 国产青草视频在线观看免费影院 | 国产自拍啪啪 | 欧美日韩高清完整版在线观看免费 | 先锋资源久久 | zozzozozozo大| 日本人在线看片 | 欧美日韩综合网在线观看 | 午夜伦理:伦理片 | ffyybb免费福利视频 | 欧美多gayxxxx | 国产午夜精品久久理论片小说 | 嫩草视频在线观看免费 | 奇米色88欧美一区二区 | 国色天香社区在线 | 91超级碰| 爽好舒服快想要免费看 | 热久久天天拍天天拍热久久2018 | 偷偷狠狠的日日高清完整视频 | 校园全肉高h湿一女多男 | 午夜大片在线观看 | 久久亚洲高清观看 | 欧美第十页 | 黄绝一级 | 日本xxxxx高清免费观看 | 国产视频久久久 |