文件上传系统
1. 文件上传分析图解
- 【客户端】输入流,从硬盘读取文件数据到程序中;
- 【客户端】输出流,写出文件数据到服务端;
- 【服务端】输入流,读取文件数据到服务端程序;
- 【服务端】输出流,写出文件数据到服务器硬盘中;
- 【服务端】获取输出流,回写数据;
- 【客户端】获取输入流,解析回写数据;
2. 案例实现
a. 服务器端
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FileUpload_Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9956);
System.out.println("Server is set up ...");
while (true) {
Socket accept = serverSocket.accept();
new Thread(() -> {
try (
BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
FileOutputStream fis = new FileOutputStream(System.currentTimeMillis() + ".jpg");
BufferedOutputStream bos = new BufferedOutputStream(fis);
) {
byte[] b = new byte[1024 * 8];
int len;
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
}
OutputStream out = accept.getOutputStream();
out.write("Server accepts upload.".getBytes());
out.close();
bos.close();
bis.close();
accept.close();
System.out.println("Accept is over.");
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FileUpload_Server {
public static void main(String[] args) throws IOException {
ExecutorService service = Executors.newFixedThreadPool(2);
ServerSocket serverSocket = new ServerSocket(9956);
System.out.println("Server is set up ...");
while (true) {
Socket accept = serverSocket.accept();
Thread t = new Thread(() -> {
try (
BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
FileOutputStream fis = new FileOutputStream(System.currentTimeMillis() + ".jpg");
BufferedOutputStream bos = new BufferedOutputStream(fis);
) {
byte[] b = new byte[1024 * 8];
int len;
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
}
OutputStream out = accept.getOutputStream();
out.write("Server accepts upload.".getBytes());
out.close();
bos.close();
bis.close();
accept.close();
System.out.println("Accept is over.");
} catch (IOException e) {
e.printStackTrace();
}
});
service.submit(t);
}
}
}
b. 客户端
import java.io.*;
import java.net.Socket;
public class FileUpload_Client {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\80626\\Desktop\\test.png"));
Socket socket = new Socket("localhost", 9956);
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
byte[] b = new byte[1024 * 8];
int len;
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
bos.flush();
}
socket.shutdownOutput();
System.out.println("Sending is over.");
InputStream in = socket.getInputStream();
byte[] back = new byte[1024];
in.read(back);
System.out.println(new String(back));
in.close();
socket.close();
bis.close();
}
}
原文链接:https://qwert.blog.csdn.net/article/details/105062819