利用webservice接口上传文件…_c# webserver文件上传接口-程序员宅基地

技术标签: Webservice  

一、Web Service端
新建->项目->ASP.NET Web服务应用程序
//Service.cs
public class Service : System.Web.Services.WebService
{
      public Service () {

              //如果使用设计的组件,请取消注释以下行
              //InitializeComponent();
      }
      //[WebMethod]
      //public string HelloWorld() {
      //      return "Hello World";
      //}

     
      [WebMethod]
      public int UploadFile(string fileName, int Length, byte[] file_data)
        //上传二进制文件

              string constr = "server=127.0.0.1;database=tb_file;Integrated Security=SSPI;";
              SqlCommand      cmd = new SqlCommand();
              SqlConnection con = new SqlConnection(constr);

              //连接数据库
              cmd.Connection = con;

              //获取或设置一个值,该值指示如何解释 CommandText 属性,CommandType.Text指SQL 文本命令
              cmd.CommandType = CommandType.Text;

              //连接打开
              if (con.State == 0)
                      con.Open();

              cmd.CommandText = "insert into tb_file (filename,filesize,filedata) values( @filename, @filesize, @filedata)";

              SqlParameter spFilename = new SqlParameter("@filename", SqlDbType.VarChar);
              spFilename.Value = fileName;
              cmd.Parameters.Add(spFilename);
              SqlParameter spFile = new SqlParameter("@filedata", SqlDbType.VarBinary);//SqlDbType.VarBinary:Byte 类型的 Array。二进制数据的可变长度流,范围在 1 到 8,000 个字节之间。如果字节数组大于 8,000 个字节,隐式转换会失败。在使用比 8,000 个字节大的字节数组时,请显式设置对象。
              spFile.Value = file_data;
              cmd.Parameters.Add(spFile);
              SqlParameter spFilesz = new SqlParameter("@filesize", SqlDbType.Int);
              spFilesz.Value = Length;
              cmd.Parameters.Add(spFilesz);             

              //执行前面构造的sql查询命令
              int count = cmd.ExecuteNonQuery();

              //服务器收到客户端发送的这个数据以后,先保存在数据库中,,然后顺便在本地保存一个副本
              string str_SavePath = "F:\C#学习作业、\WebClient\";
              FileStream newfs = new FileStream(str_SavePath + fileName, FileMode.Create, FileAccess.Write);
              newfs.Write(file_data, 0, Length);
              newfs.Close();

              con.Close();
              return count;
         
}

二、客户端上传
新建一个应用程序
[转载]利用webservice接口上传文件,并将文件内容保存在数据库中,数据库表


//Form1.cs
namespace WebClient
{
      public partial class Form1 : Form
      {
              //OpenFileDialog表示一个通用对话框,用户可以使用此对话框来指定一个或多个要打开的文件的文件名。
              OpenFileDialog op = new OpenFileDialog();

              public Form1()
              {
                      InitializeComponent();
              }

           
              private void button1_Click(object sender, EventArgs e)
              {
                      //浏览上传文件
                      if (op.ShowDialog() == DialogResult.OK)//DialogResult表示对话框的返回值是 OK(通常从标签为“确定”的按钮发送)。
                      {
                              this.textBox1.Text = Path.GetFullPath(op.FileName);
                      }
              }

                           
              private void button2_Click(object sender, EventArgs e)
              {
                      //使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例
                      FileStream    fs = new FileStream(this.textBox1.Text, FileMode.Open, FileAccess.Read);

                      //为指定的流初始化 StreamReader 类的新实例。
                  StreamReader sr  = new StreamReader(fs);

                  byte[] file_data = new byte[(int)fs.Length];
                  fs.Read(file_data, 0, (int)fs.Length);
                  string file_name = Path.GetFileName(op.FileName);

                      //WebClientCon为对WebService端的Web引用
                      WebClientCon.Service obj = new WebClientCon.Service();
                      try
                      {
                              obj.UploadFile(file_name, (int)fs.Length, file_data);
                              MessageBox.Show("上传成功!");
                      }
                      catch (System.Exception ex)
                      {
                            MessageBox.Show(ex.Message.ToString());
                      }
              }

             
              private void button3_Click(object sender, EventArgs e)
              {
                      SqlConnection conn = new SqlConnection();
                      conn.ConnectionString = "Server=127.0.0.1;uid=sa;pwd=123456;database=tb_file";
                      conn.Open();
                      SqlCommand cmd = new SqlCommand("select * from tb_file", conn);
                      SqlDataReader drNew = cmd.ExecuteReader();
                      if (drNew.HasRows)
                      {
                              while (drNew.Read())
                              {
                                      listBox1.Items.Add( drNew[0].ToString() + ":" + drNew[1].ToString());
                              }
                      }
                      drNew.Close();
              }
      }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012729210/article/details/14165603

智能推荐

BAT批处理创建文件桌面快捷方式_批处理创建桌面快捷方式-程序员宅基地

文章浏览阅读1.5w次,点赞9次,收藏26次。简介一个创建某个文件到桌面快捷方式的BAT批处理.代码@echooff::设置程序或文件的完整路径(必选)setProgram=D:\Program Files (x86)\格式工厂.4.2.0\FormatFactory.exe::设置快捷方式名称(必选)setLnkName=格式工厂v4.2.0::设置程序的工作路径,一般为程序主目录,此项若留空,脚本将..._批处理创建桌面快捷方式

射频识别技术漫谈(6-10)_芯片 ttf模式-程序员宅基地

文章浏览阅读2k次。射频识别技术漫谈(6-10),概述RFID的通讯协议;射频ID卡的原理与实现,数据的传输与解码;介绍动物标签属性与数据传输;RFID识别号的变化等_芯片 ttf模式

Python 项目实战 —— 手把手教你使用 Django 框架实现支付宝付款_django 对接支付宝接口流程-程序员宅基地

文章浏览阅读1.1k次。今天小编心血来潮,为大家带来一个很有趣的项目,那就是使用 Python web 框架 Django 来实现支付宝支付,废话不多说,一起来看看如何实现吧。_django 对接支付宝接口流程

Zabbix 5.0 LTS在清理历史数据后最新数据不更新_zabbix问题没有更新-程序员宅基地

文章浏览阅读842次。Zabbix 5.0 LTS,跑了一年多了一直很稳定,前两天空间显示快满了,于是手贱清理了一下history_uint表(使用mysql truncate),结果折腾了一周。大概故障如下:然后zabbix论坛、各种群问了好久都没解决,最后自己一番折腾似乎搞定了。初步怀疑,应该是由于历史数据被清空后,zabbix需要去处理数据,但是数据量太大,跑不过来,所以来不及更新了(?)..._zabbix问题没有更新

python学习历程_基础知识(2day)-程序员宅基地

文章浏览阅读296次。一、数据结构之字典 key-value

mybatis-plus字段策略注解strategy_mybatisplus strategy-程序员宅基地

文章浏览阅读9.7k次,点赞3次,收藏13次。最近项目中遇到一个问题,是关于mybatis-plus的字段注解策略,记录一下。1问题调用了A组件(基础组件),来更新自身组件的数据,发现自己组件有个字段总是被清空。2原因分析调用的A组件的字段,属于基础字段,自己业务组件,对这个基础字段做了扩展,增加了业务字段。但是在自己的组件中的实体注解上,有一个注解使用错误。mybatis-plus封装的updateById方法,如果..._mybatisplus strategy

随便推点

信息检索笔记-索引构建_为某一文档及集构件词项索引时,可使用哪些索引构建方法-程序员宅基地

文章浏览阅读3.8k次。如何构建倒排索引,我们将这个过程叫做“索引构建”。如果我们的文档很多,这样索引就一次性装不下内存,该如何构建。硬件的限制 我们知道ram读写是随机的操作,只要输入相应的地址单元就能瞬间将数据读出来或者写进去。但是磁盘不行,磁盘必须有一个寻道的过程,外加一个旋转时间。那么只有涉及到磁盘,我们就可以考虑怎么节省I/O操作时间。【注】操作系统往往以数据块为单位进行读写。因为读一_为某一文档及集构件词项索引时,可使用哪些索引构建方法

IT巨头英特尔看好中国市场前景-程序员宅基地

文章浏览阅读836次。英特尔技术与制造事业部副总裁卞成刚7日在财富论坛间隙接受中新社记者采访时表示,该公司看好中国市场前景,扎根中国并以此走向世界是目前最重要的战略之一。卞成刚说,目前该公司正面临战略转型,即从传统PC服务领域扩展至所有智能设施领域,特别是移动终端。而中国目前正引领全球手机市场,预计未来手机、平板电脑等方面的发明创新将大量在中国市场涌现,并推向全球。持相同态度的还有英特尔中国区执行董事戈峻。戈峻

ceph中的radosgw相关总结_radosgw -c-程序员宅基地

文章浏览阅读627次。https://blog.csdn.net/zrs19800702/article/details/53101213http://blog.csdn.net/lzw06061139/article/details/51445311https://my.oschina.net/linuxhunter/blog/654080rgw 概述Ceph 通过radosgw提供RES..._radosgw -c

前端数据可视化ECharts使用指南——制作时间序列数据的可视化曲线_echarts 时间序列-程序员宅基地

文章浏览阅读3.7k次,点赞6次,收藏9次。我为什么选择ECharts ? 本周学校课程设计,原本随机佛系选了一个51单片机来做音乐播放器,结果在粗略玩了CN-DBpedia两天后才回过神,课设还没有开始整。于是懒癌发作,碍于身上还有比赛的作品没交,本菜鸡对硬件也没啥天赋,所以就直接把题目切换成软件方面的题目。写python的同学选择了一个时间序列数据的可视化曲线程序设计题目,果真python在数据可视化这一点性能很优秀。..._echarts 时间序列

ApplicationEventPublisherAware事件发布-程序员宅基地

文章浏览阅读1.6k次。事件类:/** * *   * @className: EarlyWarnPublishEvent *   * @description:数据风险预警发布事件 *   * @param: *   * @return: *   * @throws: *   * @author: lizz *   * @date: 2020/05/06 15:31 * */public cl..._applicationeventpublisheraware

自定义View实现仿朋友圈的图片查看器,缩放、双击、移动、回弹、下滑退出及动画等_imageview图片边界回弹-程序员宅基地

文章浏览阅读1.2k次。如需转载请注明出处!点击小图片转到图片查看的页面在Android开发中很常用到,抱着学习和分享的心态,在这里写下自己自定义的一个ImageView,可以实现类似微信朋友圈中查看图片的功能和效果。主要功能需求:1.缩放限制:自由缩放,有最大和最小的缩放限制 2居中显示:.若图片没充满整个ImageView,则缩放过程将图片居中 3.双击缩放:根据当前缩放的状态,双击放大两倍或缩小到原来 4.单指_imageview图片边界回弹