ClientFiles.java
package com.files.mc;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientFiles extends Thread {
public void run() {
try {
Socket socket = new Socket("127.0.0.1", 8080);
InputStream fin = socket.getInputStream();
OutputStream fout = socket.getOutputStream();
File file = new File("E:/迅雷下载/170322-04.mp4");
long times = System.currentTimeMillis();
System.out.println("\t正在校验 " + file.getName() + "文件MD5请稍后...\n");
String md5 = MD5FileUtil.getFileMD5String(file);
System.out.println("[MD5验证完毕 耗时: " +
(System.currentTimeMillis() - times) / 1000 + " 秒 正在执行数据传输]\n");
fout.write(md5.getBytes());
fout.flush();
if (fin.read() == 0) {
System.out.println("数据传输完毕!大小: " + file.length() + " 字节 耗时: 0秒 ! 秒传机制");
} else {
long time = System.currentTimeMillis();
System.out.println("\t\t数据传输中...\n");
FileInputStream filein = new FileInputStream(file);
byte[] b = new byte[1024 * 1024 * 2];
while (filein.available() != 0) {
int len = filein.read(b);
fout.write(b, 0, len);
fout.flush();
}
System.out.println(
"文件传输完毕!大小: " + file.length() + " 字节 耗时: " + (System.currentTimeMillis() - time) / 1000 + "秒");
filein.close();
}
fout.close();
fin.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ClientFiles().start();
}
}
ServerFiles.java
package com.files.mc;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.zip.InflaterOutputStream;
public class ServerFiles implements Runnable {
private Socket socket;
public ServerFiles(Socket socket) {
this.socket = socket;
}
public void run() {
try {
InputStream fin = socket.getInputStream();
OutputStream fout = socket.getOutputStream();
byte[] b = new byte[1024];
int len = 0;
len = fin.read(b);
String md5 = new String(b, 0, len);
System.out.println(md5);
File file = new File("filess");
File[] files = file.listFiles();
boolean state = false;
for (File file2 : files) {
if (file2.getName().equalsIgnoreCase(md5)) {
state = true;
break;
}
}
if (state == false) {
fout.write(1);
fout.flush();
FileOutputStream fileout = new FileOutputStream(new File("filess", md5));
byte[] b1 = new byte[1024 * 1024 * 2];
while ((len = fin.read(b)) != -1) {
fileout.write(b1, 0, len);
}
fileout.close();
} else {
fout.write(0);
fout.flush();
}
fout.close();
fin.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void openServer() throws Exception {
ServerSocket server = new ServerSocket(8080);
ExecutorService executor = Executors.newFixedThreadPool(10);
while (true) {
ServerFiles socket = new ServerFiles(server.accept());
executor.execute(socket);
}
}
public static void main(String[] args) {
try {
openServer();
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
网盘文件秒传技术是现代云存储服务中的一个重要特性,它极大地提高了用户上传大文件的效率,节省了网络带宽和存储空间。秒传技术主要依赖于文件的唯一标识符和服务器端的数据去重机制。下面我们将深入探讨这一技术的...
fastDFS文件服务客户端, 支持断点续传, 分块上传, 文件秒传, 稳定的前后端组件(前端H5), 支持多用户并发上传文件校验(文件锁), 可以快速集成fastDFS文件服务, 免去繁琐的配置, 拿来即用, 目前暂时仅支持springboot...
数据文件秒传技术是一种高效的文件传输方式,尤其适用于大文件如系统镜像的快速移动和复制。这种技术的核心目标是优化文件传输效率,减少在大文件传输过程中的等待时间,从而提升用户的工作效率。 首先,我们需要...
4、支持文件秒传 5、支持显示上传进度 6、支持图片预览 7、支持暂停上传 8、拖拽上传 文件列表: (1)index.html是演示上传的 (2)server/webup.aspx是后台接收上传的(另外两ashx是测试文件) (3)webuploader.js和...
基于SpringBoot的文件上传系统,前后端分离,单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传 项目经过严格测试,确保可以运行! 采用前后端分离的方式进行开发,实现了几种常用的文件上传功能...
### WebUploader 文件秒传与断点续传技术详解 #### 一、WebUploader简介 WebUploader是一款由百度前端团队FEX开发的现代化文件上传组件。它以HTML5为基础,并兼容Flash,确保了广泛的浏览器支持性,包括IE6+、iOS6...
这个压缩包"SpringMVC精品资源--单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传.zip"包含了关于SpringMVC处理文件上传的各种技术点,这些都是开发者在实际项目中经常遇到的需求。 1. **单文件...
基于go的大文件切片上传、断点续传、秒传.zip 1、如何唯一标示一个文件? 文件的信息后端会存储在mysql数据库表中。 在上传之前,前端通过 spark-md5.js 计算文件的md5值以此去唯一的标示一个文件。 spark-md5.js ...
minio springboot 实现大文件的分片上传、断点续传、秒传的功能
在文件上传部分已有功能的基础上实现了按10MB分为多个块,异步上传,服务端合并,MD5验证,文件秒传,断点续传,网络问题自动重试,手动重试; 4.图片上传部分:在文件上传部分已有功能的基础上实现了上传前缩略图...
【Springboot文件上传】前后端双开,大文件秒传、断点续传的解决方案和优雅实现 Demo体验地址:http://easymall.ysqorz.top/file 1、这里指的 “秒传”,是指:当用户选择上传一个文件时,服务端检测该文件之前是否...
思路解析: 思路是为了解决实际业务中大文件上传,中途网络中断和充分利用多请求,加速...有了这个思路,那么在上传若干个临时文件时,就需要进行告知服务端,本次上传的大文件基本信息,本实例采用前后端分离实现。
3. **秒传检测**:在用户上传文件前,前端可以先将文件的MD5值发送到后端,检查服务器是否已有相同文件,避免重复上传。 4. **文件合并**:所有分块上传完成后,后端负责将它们合并成完整的文件,存储在指定位置,...
文件探测协议的主要目的是检查文件是否已经部分或全部存在于服务器上,从而实现断点续传和文件秒传功能。客户端首先将文件按50KB的大小进行切片,计算每个切片的MD5指纹和偏移地址,以及整个文件的MD5。然后,这些...
单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传 前端项目地址: : 简介 预先采用vue.js + plupload + element-ui实现了文件在浏览器端的发送,而采用了spring boot + spring + spring mvc + ...
完整的文件断点续传DEMO,直接导入eclipse就可以用,前端用HTML5对文件进行切片,后端由JAVA做服务器进行接收。
在本文中,我们将深入探讨如何使用SpringBoot框架与Plupload工具进行集成,以实现文件的批量上传、断点续传和秒传功能。这个项目基于SpringBoot 2和Plupload 2.3.6,提供了直观的上传进度条,并且是在IntelliJ IDEA...
在Android平台上,大文件上传和秒传功能是许多应用程序的核心需求,尤其是在云存储、社交分享和协作工具中。本文将详细解析如何实现“Android大文件上传秒传之在线版”的技术要点。 首先,理解“秒传”功能。秒传是...
文件秒传功能是许多云存储服务和文件分享平台的一个特性。它通过比较新上传文件的MD5值与服务器上已有的文件MD5值来判断是否已有相同的文件。如果找到匹配的MD5,就直接指向已存在的文件,避免了重复上传,从而提高...
在后端,SpringBoot需要配置MultipartFile接收文件,同时,为了支持大文件秒传,我们需要对文件进行切片处理,将大文件分成多个小块上传。每个小块上传时,服务器会验证其哈希值,若发现有相同的块,就跳过上传,...