欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Socket+mysql實(shí)現(xiàn)簡易文件上傳器的代碼

 更新時間:2016年10月26日 10:15:31   作者:PettyKoKo  
最近在做一個小項(xiàng)目,項(xiàng)目主要需求是實(shí)現(xiàn)一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務(wù)器的數(shù)據(jù)庫(本地的)。下面通過本文給大家分享下實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧

最近跟著某網(wǎng)站學(xué)習(xí)了一個小項(xiàng)目,因?yàn)榘滋煊姓n,所以都是晚上寫的,今天把它完成了。

項(xiàng)目主要是實(shí)現(xiàn)一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務(wù)器的數(shù)據(jù)庫(本地的)。

首先建兩個表如下:

一個文件信息表

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; 

一個用戶信息表

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類

package fileUpload; 
import java.io.Serializable; 
/* 
* 用戶實(shí)體類 
*/ 
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類

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";// 數(shù)據(jù)庫連接字符串 
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";// 數(shù)據(jù)庫連接字符串 
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類

package fileUpload; 
import java.io.Serializable; 
/* 
* 文件實(shí)體類 
*/ 
public class FileInfo implements Serializable{ 
private static final long serialVersionUID = 2554622626228481455L; 
private int fid;//文件編號 
private String fname;//文件名 
private byte[] fcontent;//文件內(nèi)容 
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類

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; 
//將文件保存到數(shù)據(jù)庫中 
public boolean save(FileInfo file){ 
String url = "jdbc:mysql://localhost:3306/fileupload";//數(shù)據(jù)庫連接字符串 
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;

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
/* 
* 啟動服務(wù)器類 
*/ 
public class StartServer { 
@SuppressWarnings("resource") 
public static void main(String[] args){ 
try { 
// 1.創(chuàng)建一個服務(wù)器端Socket,即ServerSocket,指定綁定的端口,并監(jiān)聽此端口 
ServerSocket serverSocket = new ServerSocket(8888); 
Socket socket = null; 
System.out.println("服務(wù)器已啟動,等待客戶端的連接..."); 
//循環(huán)監(jiān)聽等待客戶端的連接 
while (true) { 
// 2.調(diào)用accept()方法開始監(jiān)聽,等待客戶端的連接 
socket = serverSocket.accept(); 
//創(chuàng)建一個新的線程 
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;

import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.Socket; 
import javax.swing.JOptionPane; 
/* 
* 服務(wù)器端多線程處理類 
*/ 
public class ServerThread extends Thread { 
static Socket socket = null; 
private static ObjectInputStream ois = null;// 對象輸入流 
private ObjectOutputStream oos = null;// 對象輸出流 
private UserService us = new UserService();// 用戶業(yè)務(wù)對象 
private FileService fs = new FileService();// 文件業(yè)務(wù)對象 
// 通過構(gòu)造方法,初始化socket 
public ServerThread(Socket socket) { 
ServerThread.socket = socket; 
} 
public void run() { 
try { 
ois = new ObjectInputStream(socket.getInputStream());//接收客戶端發(fā)來的消息 
oos = new ObjectOutputStream(socket.getOutputStream());//用來向客戶端發(fā)送消息 
CommandTransfer transfer = (CommandTransfer) ois.readObject(); // 讀取客戶端發(fā)送到服務(wù)器的指令操作 
transfer = execute(transfer); // 執(zhí)行客戶端送到服務(wù)器的指令操作 
oos.writeObject(transfer);// 響應(yīng)客戶端 
} catch (IOException | ClassNotFoundException e) { 
e.printStackTrace(); 
} 
} 
/* 
* 執(zhí)行客戶端發(fā)送到服務(wù)器的指令操作 
*/ 
private CommandTransfer execute(CommandTransfer transfer) { 
String cmd = transfer.getCmd();// 獲取當(dāng)前操作的指令 
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("歡迎你對本系統(tǒng)的支持"); 
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;// 登陸次數(shù) 
while (true) { 
count++; 
if (count > 3) { 
System.out.println("你已連續(xù)3次登陸失敗,程序退出!"); 
System.exit(0); 
} 
System.out.print("請輸入用戶名:"); 
user.setUsename(input.next()); 
System.out.print("請輸入密碼:"); 
user.setUsepsd(input.next()); 
System.out.print("請?jiān)俅屋斎朊艽a:"); 
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);// 將數(shù)據(jù)發(fā)送到服務(wù)器 
transfer = getData();// 獲取服務(wù)器返回的數(shù)據(jù) 
System.out.println(transfer.getResult());// 輸出顯示結(jié)果 
System.out.println("*****************************"); 
if (transfer.isFlag()) { 
break;// 如果注冊成功,則不再重復(fù)執(zhí)行注冊 
} 
} catch (UnknownHostException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
} 
} 
showLogin();// 注冊成功后顯示登陸 
} 
// 獲得服務(wù)器的數(shù)據(jù) 
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);// 將數(shù)據(jù)發(fā)送到服務(wù)器 
transfer = getData();// 獲取服務(wù)器返回的數(shù)據(jù) 
System.out.println(transfer.getResult());// 輸出顯示結(jié)果 
} catch (UnknownHostException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
} 
} 
// 向服務(wù)器發(fā)送數(shù)據(jù) 
public static void sendData(CommandTransfer cmd) throws IOException { 
// TODO Auto-generated method stub 
ObjectOutputStream oos = null; 
try { 
if(socket.isClosed())//判斷socket是否被關(guān)閉,如果關(guān)閉,就打開 
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);// 將數(shù)據(jù)發(fā)送到服務(wù)器 
transfer = getData();// 獲取服務(wù)器返回的數(shù)據(jù) 
System.out.println(transfer.getResult());// 輸出顯示結(jié)果 
System.out.println("*****************************"); 
if (transfer.isFlag()) { 
break;// 如果注冊成功,則不再重復(fù)執(zhí)行注冊 
} 
} catch (UnknownHostException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
} 
} 
showUploadFile();// 登陸成功后進(jìn)行文件的上傳 
} 
}

運(yùn)行效果圖如下:

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

以上所述是小編給大家介紹的Java Socket+mysql實(shí)現(xiàn)簡易文件上傳器,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java IO流 之 輸出流 OutputString()的使用

    java IO流 之 輸出流 OutputString()的使用

    這篇文章主要介紹了java IO流 之 輸出流 OutputString()的使用的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Java中JVM的類加載器詳解

    Java中JVM的類加載器詳解

    這篇文章主要介紹了Java中的類加載器詳解,從概念上來講, 自定義類加載器一般指的是程序中由開發(fā)人員自定義的類加載器,但是Java虛擬機(jī)規(guī)范卻沒有這么定義,而是將所有派生于抽象類ClassLoader的類加載器都劃分為自定義類加載器,需要的朋友可以參考下
    2023-07-07
  • SpringBoot項(xiàng)目整合攔截器詳解

    SpringBoot項(xiàng)目整合攔截器詳解

    這篇文章主要介紹了SpringBoot項(xiàng)目整合攔截器詳解,java里的攔截器是動態(tài)攔截Action調(diào)用的對象,它提供了一種機(jī)制可以使開發(fā)者在一個Action執(zhí)行的前后執(zhí)行一段代碼,攔截器用于在某個方法或者字段被訪問之前進(jìn)行攔截,然后再之前或者之后加入某些操作,需要的朋友可以參考下
    2023-10-10
  • springboot用thymeleaf模板的paginate分頁完整代碼

    springboot用thymeleaf模板的paginate分頁完整代碼

    本文根據(jù)一個簡單的user表為例,展示 springboot集成mybatis,再到前端分頁完整代碼,需要的朋友可以參考下
    2017-07-07
  • Java輸出打印工具類封裝的實(shí)例

    Java輸出打印工具類封裝的實(shí)例

    下面小編就為大家?guī)硪黄狫ava輸出打印工具類封裝的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Spring Boot 通過CORS實(shí)現(xiàn)跨域問題

    Spring Boot 通過CORS實(shí)現(xiàn)跨域問題

    這篇文章主要介紹了Spring Boot 通過CORS實(shí)現(xiàn)跨域,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Pulsar源碼徹底解決重復(fù)消費(fèi)問題

    Pulsar源碼徹底解決重復(fù)消費(fèi)問題

    這篇文章主要為大家介紹了Pulsar源碼徹底解決重復(fù)消費(fèi)問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java深入分析了解平衡二叉樹

    Java深入分析了解平衡二叉樹

    平衡二叉樹又被稱為AVL樹(有別于AVL算法),且具有以下性質(zhì):它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。本文將詳解介紹一下平衡二叉樹的原理與實(shí)現(xiàn),需要的可以參考一下
    2022-06-06
  • spring?retry方法調(diào)用失敗重試機(jī)制示例解析

    spring?retry方法調(diào)用失敗重試機(jī)制示例解析

    這篇文章主要為大家介紹了spring?retry方法調(diào)用失敗重試機(jī)制的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Java面向?qū)ο缶幊讨惖睦^承詳解

    Java面向?qū)ο缶幊讨惖睦^承詳解

    這篇文章主要介紹了Java面向?qū)ο缶幊讨惖睦^承,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java面向?qū)ο缶幊填惖母拍?、功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-02-02

最新評論