最近这个项目要做一个Winfrom上传Execl到服务器。

就想到之前用Fleck做的一个小功能,但是客户端Web端的。百度吧,看有没有办法,开始找到fw4 ,但是要引用它的dll,是可以,继续找了会结果找到ClientWebSocket,只需要using System.Net.WebSockets;就好了,想着去试试。

网上很多Fleck的例子,server.Start 中只需要加上  socket.OnBinary = file =>{......},具体后面有图。

下面是客户端的:

ClientWebSocket ws = new ClientWebSocket();
        //创建WebSocket
        static string IP = ConfigurationManager.AppSettings["IP"];
        static string Point = ConfigurationManager.AppSettings["Point"];
        string url = "ws://"+ IP + ":"+ Point;

连接ws:

async void ClientWebSocketConnect(){try{if (ws.State != WebSocketState.Open){ws = new ClientWebSocket();await ws.ConnectAsync(new Uri(url), CancellationToken.None);ArraySegment<byte> bytesReceived = new ArraySegment<byte>(new byte[100]);WebSocketReceiveResult result = awaitws.ReceiveAsync(bytesReceived, CancellationToken.None);var str = Encoding.UTF8.GetString(bytesReceived.Array, 0, result.Count);label1.ForeColor = System.Drawing.Color.Green;label1.Text = str;}else{await ws.ConnectAsync(new Uri(url), CancellationToken.None);}}catch(Exception ex){label1.Text = ex.Message;}}
        /// <summary>/// 关闭断开/// </summary>async void ClientWebSocketClose(){if (ws.State == WebSocketState.Open || ws.State == WebSocketState.CloseReceived){await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "用户关闭", CancellationToken.None);ws.Dispose();}}

另外给Form1_FormClosing事件加了关闭连接,不然线程一直在,每次重启服务端就重新连接了。

用OpenFileDialog选择一个execl,上传

        /// <summary>/// 上传文件/// </summary>async void UpFile(){if (ws.State == WebSocketState.Open){// 用文件流打开用户要发送的文件;using (FileStream fs = new FileStream(txtSelectFile.Text, FileMode.Open)){//获取文件的名称和扩展名  string fileName = System.IO.Path.GetFileName(txtSelectFile.Text);//文件的名称转byte[] 利用了web上面url编码的功能,带了编码,避免二进制过来汉字乱码byte[] arrfileName = System.Web.HttpUtility.UrlEncodeToBytes(fileName, Encoding.GetEncoding("GB2312"));//string//分隔符byte[] arr_fgf = System.Text.Encoding.UTF8.GetBytes("|");//定义数组 赋值计算总长度byte[] arrFile = new byte[fs.Length + arrfileName.Length + arr_fgf.Length];//组装字符串的方式//把arrfileName复制到arrFileArray.Copy(arrfileName, arrFile, arrfileName.Length);//把arr_fgf复制到arrFile,在arrfileName之后Array.Copy(arr_fgf, 0, arrFile, arrfileName.Length, arr_fgf.Length);//把文件流写入arrFile指定位置fs.Read(arrFile, (arrfileName.Length + arr_fgf.Length), (arrFile.Length - arrfileName.Length - arr_fgf.Length));  // 将文件中的数据读到arrFile数组中;//以二进制方式发送WebSocketvar buffer = new ArraySegment<byte>(arrFile);await ws.SendAsync(buffer, WebSocketMessageType.Binary, true, CancellationToken.None);//清理控件txtSelectFile.Clear();//while (true)//{ArraySegment<byte> bytesReceived = new ArraySegment<byte>(new byte[100]);//接收数据WebSocketReceiveResult result = await ws.ReceiveAsync(bytesReceived, CancellationToken.None);//byte[]转stringvar str = Encoding.UTF8.GetString(bytesReceived.Array, 0, result.Count);//if (str.Length > 0)//{if(str.Contains("上传成功"))label1.ForeColor = System.Drawing.Color.Green;elselabel1.ForeColor = System.Drawing.Color.Red;label1.Text = str;//    return;//}//}}}}

这句是核心,选用二进制的方式

因为数据库要保存文件名称,以及文件路径,方便查找,就顺带把名字传过去了,是以 名称|文件 的方式来发送的。

文件的名称转byte[] 利用了web上面url编码的功能,带了编码,避免二进制过来汉字乱码,这个坑坑了大半天,逼得无奈用Web上的方法来处理了。测试的话就没得必要写这么麻烦。。。

服务端:

接收客户端传过来的byte[],直接写入文件,返回消息。

关键点都很简单,过程有点乱。。。然后把这个改成服务。。嗯嗯,差不多了。。。

winfrom+Fleck 上传文件相关推荐

  1. Winfrom FtP上传文件以文件夹

    部分代码来自某些作者,由于自己的疏忽,造成来源无法给出原文链接,如果有作者看见了,麻烦留下链接,致敬开源者 部分代码来自某些作者,由于自己的疏忽,造成来源无法给出原文链接,如果有作者看见了,麻烦留下链 ...

  2. smartupload 上传文件时 把页面编码改成gbk 解决乱码

    快来java1234 吧 smartupload 上传文件时,经常会发生因为把表单设置为 enctype="multipart/form-data"而出现的中文乱码问题,本人头疼好 ...

  3. 关于上传文件的跨域问题

    在进行新框架开发的过程中,需要自定义页面组件实现脱离表单的文件(图片)上传,考虑过wex5自带的attachmentsimple的自定义写法很难受,就改用了第三方插件webuploader来实现选择文 ...

  4. html web上传文件原理,Web上传文件的原理及实现

    本文为原创,如需转载,请注明作者和出处,谢谢! 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Stru ...

  5. php利用上传文件,如何利用PHP上传文件

    上载文件表单 请选择文件: $upload_file=$_FILES['upload_file']['tmp_name']; $upload_file_name=$_FILES['upload_fil ...

  6. window linux上传文件命令,windows通过cmd命令行使用sftp上传文件至linux

    一问:sftp是什么? sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. ...

  7. 怎么接收layui上传的文件_layui 上传文件_批量导入数据UI的方法

    使用layui的文件上传组件,可以方便的弹出文件上传界面. 效果如下: 点击[批量导入]按钮调用js脚本importData(config)就可以实现数据上传到服务器. 脚本: /*** * 批量导入 ...

  8. php post 文件,PHP响应post请求上传文件的方法_php技巧

    本文实例讲述了PHP响应post请求上传文件的方法.分享给大家供大家参考,具体如下: function send_file($url, $post = '', $file = '') { $eol = ...

  9. 在SecureCRT下使用sz下载和rz上传文件

    之前通过FTP来下载Linux机器上的文件,在Windows编辑完后再上传,如此比较麻烦,刚听同事说用sz和rz命令可以实现在SecureCRT中上传下载.         配置上传下载目录:选择某个 ...

最新文章

  1. 产品经理要读什么书?怎么读?
  2. linux 数据复制 dd 简介
  3. mysql got signal 11_mysql bug : mysqld got signal 11
  4. 通过纯css实现图片居中的多种实现方式
  5. 教你轻松截获 Selenium 中的 Ajax 数据
  6. api调用实例python_调用阿里云API 的demo示例(java/python)
  7. 来电通java版_Java 程序员常用的 11 款免费 IDE 编辑器
  8. 尚硅谷大数据hadoop教程
  9. python linux 上 RS485通信 Modbus协议
  10. (Android) 日志打印 Log的使用
  11. Rime输入法第三方词库配置
  12. 多级评论单表结构设计
  13. burg算法 matlab,基于burg算法的谱估计研究及其matlab实现.doc
  14. 卜算子.咏梅 英文版
  15. 什么软件可以拍证件照电子版?分享两种拍证件照小妙招
  16. 短视频选题的方法脚本结构撰写
  17. 在51.com一岁生日庆祝会上的致辞
  18. 算法学习过程入门篇(2)-算法初步
  19. 图神经网络 —— 排列不变函数
  20. 中国科学院大学(国科大)未选课程加入课程网站(旁听蹭课专用!!!)

热门文章

  1. python首字母大写其他小写_python大小写转换,首字母大写,去除特殊字符的简单示例...
  2. Make it Divisible by 25
  3. oracle 抽样_利用ORACLE实现数据抽样
  4. ubuntu20浏览器不能上网的问题
  5. IdentityServer4 (IDS4) 快速入门
  6. 关于cocoapods遇到xxxx file not found和No such module 'XXX'的问题
  7. 访问网页出现503服务器,503错误,手把手教你网页出现503错误怎么解决
  8. 传奇手游服务器搭建_复古传奇手游服务端架设教程
  9. 整理:X86架构图示以及各部分解释
  10. 整理了60个Python小例子,拿来即用!