websocket上传文件

nginx的上传
查看[url]http://haoningabc.iteye.com/blog/2344484[/url]
效果如图
[img]http://dl2.iteye.com/upload/attachment/0121/9935/3e522bf6-b489-3503-9eb9-148c301e5a3b.png[/img]
这几天有个需求
上传大文件,需要带进度条,
nginx这个版本有7,8年了,担心有bug,不如用websocket重新写一个
原理
使用websocket.jar
前端需要分片,把一定字节的用websocket传过去
后端用流顺序写到文件里面
(理论上,如果用session把当前存的字节数就可以断点续传)
html代码如下:

<!DOCTYPE html>
<html>
<head>
<title>WebSocket Chat Client</title>
<meta charset="utf-8" />
<script type="text/javascript" src="jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="jquery.json-2.3.js"></script>
<script type="text/javascript">
$().ready(
function() {
          if (window.File && window.FileReader && window.FileList
&& window.Blob) {
} else {
alert('The File APIs are not fully supported in this browser.');
}
});

//在消息框中打印内容
function log(text) {
$("#log").append(text+"\n");
}

//全局的websocket变量
var ws;
var paragraph = 10485760;
//var paragraph = 1024;
var fileList ;
var file;
var startSize,endSize = 0;
var i = 0; j = 0;
//连接服务器
$(function() {
$("#connect").click(function() {
ws = new WebSocket($("#uri").val());
//连接成功建立后响应
ws.onopen = function() {
log("成功连接到" + $("#uri").val());
}
//收到服务器消息后响应

ws.onmessage = function(e) {
console.log("iiiiiiiiii:"+i);
log("服务器说" + e.data + " "+(e.data=="ok"));
if((e.data+"") == "ok"){
if(endSize < file.size){
console.log("file.size:"+file.size);

startSize = endSize;
endSize += paragraph ;
console.log("startSize:"+startSize);
console.log("endSize:"+endSize);
console.log("file---haha----:"+file);
document.getElementById('progress').innerHTML=Math.round(startSize / file.size * 10000) / 100.00 + "%";
if (file.webkitSlice) {
console.log("webkitSlice--->");
var blob = file.webkitSlice(startSize, endSize);
} else if (file.mozSlice) {
console.log("mozSlice--->");
var blob = file.mozSlice(startSize, endSize);
}else {
console.log("Slice--->");
var blob = file.slice(startSize, endSize);
}
var reader = new FileReader();
reader.readAsArrayBuffer(blob);
reader.onload = function loaded(evt) {
var ArrayBuffer = evt.target.result;
log("发送文件第" + (i++) + "部分");
ws.send(ArrayBuffer);
}
}else{
console.log("endSize >= file.size-->"+e.data+"<---");
console.log("endSize >= file.size-->endSize:"+endSize);
console.log("endSize >= file.size-->file.size:"+file.size);
startSize = endSize = 0;
i = 0;
log("发送" + file.name +"完毕");
log("发送文件完毕");
}
}
//连接关闭后响应
ws.onclose = function() {
log("关闭连接");
ws = null;
}
return false;
}
});
});
$(function() {
$("#sendFileForm").click(function() {
fileList = document.getElementById("file").files;
file = fileList[0];
ws.send(file.name);

})
});
$(function() {
$("#reset").click(function() {
$("#log").empty();
return false;
});
});
</script>
</head>
<body>
<span>上传的百分比</span>
<span id="progress">0</span><br>
<input type="text" id="uri" value="ws://localhost:8887"
style="width: 200px;"> <input type="button" id="connect"
value="Connect"><input type="button" id="disconnect"
value="Disconnect" disabled="disabled"><!--ws://192.168.137.178:8081/websocketchat/hao/binupload?r=haha-->
<form >
<input id="file" type="file" multiple />
<input type="button" id="sendFileForm" value="测试" />
<input type="button" id="reset" value="清空消息框" />
</form>
<form>
<textarea id="log" rows="30" cols="100"
style="font-family: monospace; color: red;"></textarea>
</form>
</body>
</html>


java的服务端代码如下

package testupload;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.nio.channels.NotYetConnectedException;
import java.util.Set;
import org.java_websocket.WebSocket;
import org.java_websocket.WebSocketServer;
import org.java_websocket.handshake.ClientHandshake;
public class UploadServer extends WebSocketServer {
public UploadServer(int port) throws UnknownHostException {
super(new InetSocketAddress(InetAddress.getByName("192.168.137.178"), port));
}
public UploadServer(InetSocketAddress address) {
super(address);
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
try {
this.sendToAll("new");
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.println(conn + " entered the room!");
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
try {
this.sendToAll(conn + " has left the room!");
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.println(conn + " has left the room!");
}
public String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
@Override
public void onMessage(WebSocket conn, String message) {
// try {
// this.sendToAll( message );
// } catch ( InterruptedException ex ) {
// ex.printStackTrace();
// }
// System.out.println( conn + ": " + message );
System.out.println("文件名" + message);
// 将文件名写入连接对象中,(需要手动修改webSocket类)
this.setFileName(message);
try {
conn.send("ok");
} catch (NotYetConnectedException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void onMessage(WebSocket conn, byte[] message) {
System.out.println("收到二进制流:");
// 将二进制流保存为文件, 文件名从连接对象中取出
saveFileFromBytes(message, "D:/c/apache-tomcat-7.0.62/webapps/websocketchat/src/" + this.getFileName());
// 告诉前台可以继续发送了.
try {
conn.send("ok");
} catch (NotYetConnectedException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static boolean saveFileFromBytes(byte[] b, String outputFile) {
FileOutputStream fstream = null;
File file = null;
try {
file = new File(outputFile);
fstream = new FileOutputStream(file, true);
fstream.write(b);
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (fstream != null) {
try {
fstream.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return true;
}
@Override
public void onError(WebSocket conn, Exception ex) {
ex.printStackTrace();
}
public void sendToAll(String text) throws InterruptedException {
Set<WebSocket> con = connections();
synchronized (con) {
for (WebSocket c : con) {
c.send(text);
}
}
}
public static void main(String[] args) throws InterruptedException, IOException {
WebSocket.DEBUG = true;
int port = 8887;
try {
port = Integer.parseInt(args[0]);
} catch (Exception ex) {
}
UploadServer s = new UploadServer(port);
s.start();
System.out.println("UploadServer started on port: " + s.getPort());
// 服务端 发送消息处理部份
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String in = sysin.readLine();
s.sendToAll(in);
}
}

}

只需要一个jar
websocket.jar
[url]http://dl.iteye.com/topics/download/decd7d91-9d2a-381f-bcea-fb0e202f6e3c[/url]
在 SAP Gateway 主机上把 SAML 2.0 配置为 Service Provider:从架构到落地的完整实战 本文详细介绍了在SAP Gateway主机上配置SAML 2.0作为Service Provider的全流程。从概念梳理到实际操作,涵盖了关键步骤:启用本地SP服务、通过反向代理导出元数据、在IdP侧完成对接、配置信任关系与Artifact绑定、设置NameID身份联合等核心环节。特别强调了HTTP Artifact绑定的背道通信机制和证书配置要点,并针对常见错误提供了排障指引。文章注重实操性,结合SAP官方文档与社区最佳实践,为运维团队提供了一套完整的SAML SSO实施框架。 阅读详情

相关推荐

淘晶驰串口屏自定义协议实战:5分钟搞定苹果时钟通信(附完整代码)

本文详细介绍了如何使用淘晶驰串口屏自定义通信协议快速实现苹果风格时钟的通信功能。通过精简的协议设计和完整的代码示例,开发者可以在5分钟内完成从硬件连接到软件实现的整个过程,适用于嵌入式开发中的高效通信需求。

weixin_29184371的博客 323

websocket实现web上传文件进度条

websocket实现web上传文件进度条

lizhi1030的博客 2342

Unity 升级 xLua 版本,编译不同平台链接库

Unity 升级 xLua 详解

LymanCao的专栏 1801

如何高效的上传大文件?

超大文件如何高效上传到服务器?

qq_41267876的博客 2627

API深度集成——OpenClaw与第三方服务无缝对接(2026实战版)

本文介绍了OpenClaw系统与第三方服务的API深度集成技术,重点阐述了RESTful API的实现方案。通过一个功能完善的REST客户端类(RestClient)展示了核心功能:支持请求重试、拦截器机制、错误处理和认证管理等;同时提供了API资源管理器(ApiResourceManager)简化资源操作。这些技术实现了OpenClaw与外部系统的稳定可靠对接,为开发者构建API集成方案提供了2026年的最佳实践。

博客 1215

提示libfakeroot.so或libfakeroot-sysv.so出错处理方法

嵌入式Linux、Buildroot交叉编译出现fakeroot问题处理方法。

阿xin*的嵌入式AI 1443

websocket 传输文件

上一章实现了websocket传输文本信息,实际上网络传输的都是二进制0和1,因而也可以传输文件。实际上websocket是tcp上的双工协议,传输文件是没有问题的,只是需要定义应用层协议才行。如果使用Tomcat的websocket传输,注意传输内容大小。而且HTTP2.0和HTTP3.0并不能使用websocket,尤其是http3.0UDP协议。httpshttpshttps。...

fenglllle的博客 1万+

使用LSTM实现自动调制识别(RML2018.01a)

目录一、LSTM的代码实现1.1 导入包1.2 数据读取及数据集划分1.3 数据预处理1.4 构建LSTM模型 本文基于RML2018.01a大型数据集,给出LSTM的信号识别的实现方式(附代码) RML2018.01a数据集信息如下: 模型 传送门 CNN/ResNet 使用CNN/ResNet实现自动调制识别(RML2018.01a) LSTM 使用LSTM实现自动调制识别(RML2018.01a)) 一、LSTM的代码实现 1.1 导入包 import numpy as np

QAQIknow的博客 6122

springboot整合websocket(三)上传文件(引导篇)

springboot整合websocket(二) springboot整合websocket(一) 接上一章,这次我们把文件上传的坑给填了 1、回顾一下 上次提到有一个方法: void onMessage(Session session, byte[] message); 这个是用来上传文件用的,先解释一下 byte[] 这个参数。 好吧~ 大家猜的没错,这个就是我们文件的二进制流。 所以说,我们要干两件事: 第一,我们js要获得文件,并转成二进制流发过来 第二,在上传之前,我们需要知道文件的名字,因

qq_44938451的博客 5226

WPF用户控件间属性传递的艺术

本文详细介绍了WPF中父控件向子控件传递属性的方法。针对常见的绑定失效问题,重点讲解了使用RelativeSource绑定技术,通过指定AncestorType确保正确访问父控件属性。文章通过实例演示了从ParentModel传递属性到ChildUserControl依赖属性的完整实现过程,包括模型定义、XAML结构设计和代码实现。这种方法有效解决了数据上下文混淆问题,为WPF开发中的控件交互提供了可靠解决方案,有助于提升应用的灵活性和可维护性。

2501_90323865的博客 56

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 912

springboot整合websocket上传文件

springboot整合websocket上传文件

qq_37705525的博客 892

基于Simulink的电源纹波抑制仿真

电源纹波(Power Supply Ripple)是指直流电源输出中存在的交流分量。纹波的存在会导致电压波动,进而影响负载设备的性能和寿命。为了确保高质量的电源输出,通常需要设计有效的滤波电路来抑制纹波。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电源纹波抑制方案。本教程将详细介绍如何使用 Simulink 进行电源纹波抑制的仿真实例。通过本教程,我们详细介绍了如何使用 Simulink 进行电源纹波抑制的仿真实例。背景介绍:理解电源纹波及其对电力电子系统的影响。仿真建模过程。

xiaoheshang_123的博客 513

java websocket 上传文件_使用Html5的WebSocket在浏览器上传文件

文件上传的步骤: 打开websocket--连接websocket服务器--在浏览器里选择文件--将文件读入到内存中(以arraybuffer的形式)--在socket里发送文件--完毕!服务器端:先配置好websocket的服务器, 这里用一个java的开源websocket服务器:Java-WebSocket根据该项目的快速教程可以建立一个websocket服务器, 就是里面的一个ChatS...

weixin_42226116的博客 3287

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

基于websocket 文件断点上传

对于打文件上传如果网突然断了,得重新来一遍,是不是很郁闷,怎么办,如果浏览器不支持FileAPI 那就只能使用 Flash来做断点上传,有了HTML5 基于Ajax或者WebSocket 的原生实现也很棒。 下面就是基于websocket  + spring 的一个实现例子   好了直接上代码 &lt;!--     文件上传例子     使用websocket上传文件     支持...

anole2012的博客 1025

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

websocket多个房间php,H5+WebSocket多文件同时上传

这次给大家带来H5+WebSocket多文件同时上传,H5+WebSocket多文件同时上传的注意事项有哪些,下面就是实战案例,一起来看一下。在传统的HTTP应用上传文件想要同时上传多个文件并查看上传进度是一件很麻烦的事情,当然现在也有一些基于SWF的文件上传组件提供这种的便利性.到了HTML5下对文件的读取和上传的控制方面就非常灵活,HTML5提供一系列的AIP进行文件读取,包括计取文件某一块的...

weixin_39822673的博客 246

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

HTML5 - WebSocket实现多文件同时上传

在传统的HTTP应用上传文件想要同时上传多个文件并查看上传进度是一件很麻烦的事情,当然现在也有一些基于SWF的文件上传组件提供这种的便利性.到了HTML5下对文件的读取和上传的控制方面就非常灵活,HTML5提供一系列的AIP进行文件读取,包括计取文件某一块的内容也非常方便,结合Web...

chongxungu8275的博客 244

HTML5-WebSocket实现多文件同时上传

在传统的HTTP应用上传文件想要同时上传多个文件并查看上传进度是一件很麻烦的事情,当然现在也有一些基于SWF的文件上传组件提供这种的便利性.到了HTML5下对文件的读取和上传的控制方面就非常灵活,HTML5提供一系列的AIP进行文件读取,包括计取文件某一块的内容也非常方便,结合Websocket进行文件的传输就变得更加方便和灵活.下面通过使用HTML5结合websocet简单地实现多文件...

dcnna0422的博客 389

Netty: websocket 文件分段上传

阅读原文 简介 前端用 Blob 分割文件,定义好每一段数据的大小,首先要把文件信息,包括文件名、文件大小、校验值、分段大小等信息发给服务器。然后是执行每一段的发送任务,可异步(有待研究,是开多个ws连接还是?????)也可同步(服务端最好要有回应事件),异步的话需要注意文件段的顺序,最好的话同步异步都用自己定义个格式帧去传输,方便校验。这里是简单版的,直接发送,没有校验! 还有,分段下载也是一样的操作~ 前端 前端用的是 ant-design-vue upload组件,customRequest自定义上

三生万物 1998

websocket 文件上传

<template> <divclass="pad20"> <inputid="file"ref="file"type="file"/> <buttonid="send"@click="send">发送</button> <divid="progress">{{progress}}</div> <div>{{(endTime-startT...

zheng156438的博客 1865

springboot整合websocket(四)上传文件(终篇)

springboot整合websocket(三)上传文件(终篇) springboot整合websocket(一)简单聊天室 springboot整合websocket(二)上传文件(引导篇) 说明 这里就涉及到一个问题,文件保存在服务器,前端页面要等后端保存完了之后,再发送下一份。 而前端想要接收服务器的消息,只能在OnMessage,所以我们需要改3个地方 前端webSocket.onmessage()方法里面,我们需要判断一下,哪些消息是显示的,哪些消息是发送下一份文件 这个采用的就是Messa

qq_44938451的博客 4683

php swoole上传文件,Swoole实验室:7-使用Websocket上传文件(1)

服务端我们继续使用Swoole实验室:1-使用Composer构建项目构建好的项目,新建文件\src\App\Uploader.php:namespace Helloweba\Swoole;use swoole_websocket_server;class Uploader{protected $ws;protected $host = '0.0.0.0';protected $port = 95...

weixin_35828255的博客 757

前端实现websocket之文件分片上传

3、当所有文件片段接收完成后,后端将文件拼接为完整文件,并进行校验(如哈希校验)确保文件完整性。方法发送每个文件片段,为确保片段顺序和完整性,通常会给每个片段附加一个序号或 ID。1、后端 WebSocket 服务器接收每个文件片段,并逐步将它们保存到服务器上。2、在接收过程中,后端需要跟踪文件片段的序号,确保数据的正确拼接顺序。4、当分片文件上传完成后,请求合并接口后端进行文件合并处理即可。2、进行分片设置,利用Blob的slice方法进行文件分片处理。1、通过DOM获取文件对象,并且对文件进行。

m0_71288644的博客 1038

java websocket 上传大文件,websocket与html5实现批量大文件逐…

websocket与html5实现批量大文件逐…jsp 代码(由于直接使用html元素上传会出问题,此处使用工具转化成图片):java服务端代码如下,使用net.sf.json相关的jar包和maven下的Java-WebSocket-1.3.1-SNAPSHOT.jar,低版本jdk可能不支持,此处使用1.8版本jdk环境package controller;import java.io.Buf...

weixin_30539081的博客 873

springboot里使用websocket实现文件上传并且显示进度

首先,我们清晰一下思路 1)先实现文件上传,我们应该清楚,文件上传和进度走的是两条路线,即异步; 2)再使用文件上传解析器去获取文件进度信息,这个信息是保存在一个session域里的,会被实时刷新; 3)websocket定时遍历,实现点对点发送上传进度信息; 很简单,就这三步 接下来开始实现 所需的maven依赖 <!--文件上传--> &l...

flykoala 6590

java websocket 上传大文件,使用java websocket API和Javascript上传文件

我正在学习websocket并且已经使用websocket / json完成了聊天程序.但我坚持上传ATM的文件.任何建议&回答会很感激.服务器端:package websocket;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io....

weixin_39789042的博客 1446
上一篇: nginx带进度条的上传超大文件
下一篇: jslinux-deobfuscated-network
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值