利用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

智能推荐

linux 内核升级-程序员宅基地

文章浏览阅读841次,点赞28次,收藏9次。centos 7.x 升级内核 3.x 至 5.x

去掉java文件中的注释_利用JavaParser去除java文件中的注释-程序员宅基地

文章浏览阅读922次。利用JavaParser去除java文件中的注释个人博客:记录一下在项目实施过程中的一些点情景回顾之前项目有个需求,就是去掉.java文件中的所有注释,常用的方法是用正则匹配。然而在网络上查找到的正则或多或少都有一些问题,无法匹配到所有的情况。或者说,由于写.java文件的人的不规范(各种奇葩的问题),导致正则覆盖不全。所以正则方法不靠谱,或者说,存在一定的限制。新的想法后来想到利用AST来去除注..._在线java代码去除注释工具

VSCode - 使用VSCode远程连接到Linux并实现免密码登录_vscode连接linux-程序员宅基地

文章浏览阅读3w次,点赞77次,收藏282次。VSCode - Linux - 使用VSCode远程连接到Ubuntu并实现免密登录我使用的是Ubuntu14.04,即便是使用其他发行版也不会影响操作步骤_vscode连接linux

生活随记-腊月第一天-程序员宅基地

文章浏览阅读2.3k次。年底了总是很容易思考人生。出差坐在太原的yd酒店15楼,泡一壶茶翻着书听点音乐,坐在窗边看下空旷冷清的街道。感叹一声,逝者如斯夫不舍昼夜。这一年年过得真快。思考着自己的工作和以后的生活,何去何从。很多事情形成习惯之后就会懒得去改变,逐渐形成一种倦怠。工作,生活,投资也是。也好,今晚就让自己沉浸在无尽交织的思绪中吧。明天睡个懒觉吃个brunch回上海。转眼又到12月了。..._腊月第一天

ftp 下载时防止从缓存中获取文件-程序员宅基地

文章浏览阅读1k次。//http://baike.baidu.com/link?url=QucJiA_Fg_-rJI9D4G4Z4687HG4CfhtmBUd5TlXrcWCeIEXCZxIh0TD7ng1wROAzAuGD8qncM65XK4BZ1K1uqqintCFTP_MFC_TESTDlg::FTP_DownLoadFile(char*FtpIp,char*User,char*Passwor..._ftp 不使用缓存

windows下配置IIS以及优化配置_windows iis-程序员宅基地

文章浏览阅读2.7k次。IIS配置及优化_windows iis

随便推点

linux系统rabbitmq安装步骤_rabbitmq linux安装-程序员宅基地

文章浏览阅读768次。一、安装erlang:1、先下载rpm包:wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm2、rpm包:rpm -Uvh erlang-solutions-1.0-1.noarch.rpm可能会有以下问题:解决办法:(执行以下命令后,在执行上一条命令)yum..._rabbitmq linux安装

CentOS 7 安装最新版Docker教程_centos7安装最新版dockers-程序员宅基地

文章浏览阅读781次。docker安装官方文档:Install Docker Engine on CentOS2、安装提供了工具3、通过添加docker repository如果出现上面的错误提示,可通阿里源进行添加4、安装docker4.1、直接安装最新版本这步完成后可直接跳至启动docker4.2、或者安装指定版本按版本号倒序列出可安装版本列表安装指定版本例如安装20.10.9版本5、启动docker通过进行启动设置docker服务开机启动6、测试7、卸载docker下的_centos7安装最新版dockers

敏感字识别算法基于JDK8 lambada表达式_敏感文本识别算法-程序员宅基地

文章浏览阅读429次。package aaa.bbb.demo;import java.util.ArrayList;import java.util.List;public class RecognitionDemo { public static void main(String[] args) { String str1="SB哈NM哈哈哈WBDhdsada"; String str_敏感文本识别算法

华为鸿蒙系统(Huawei HarmonyOS)

华为鸿蒙系统Huawei HarmonyOS

JS读取粘贴板内容-程序员宅基地

文章浏览阅读4.9k次。1.1 监听onpaste事件1.1.1 定义和用法npaste 事件在用户向元素中粘贴文本时触发。注意:虽然使用的 HTML 元素都支持 onpaste 事件,但实际上并非支持所有元素,例如 <p> 元素, 除非设置了 contenteditable 为 "true" (查看下文的更多实例)。提示:onpaste 事件通常用于 type="text" 的 ..._js 获取粘贴板内容 移动端

Win10系统下软件UI显示不完整解决方案_用苹果设计的ui在win显示不明显-程序员宅基地

文章浏览阅读4.7k次,点赞2次,收藏4次。在最初升级win10的时候就想到了这些问题,例如和各种软件的不兼容性。当然,事实上win10并没有想象的那么糟,作为一个windows user 来说,win10的确是很高大上的,无论是颜值或者是体验,都让人爱不释手。下面我就说一下最近和win10的那些事之一:在win10系统下安装了IBM Cognos Transform后,Transform的一些设计界面不能完全显示,而后我们就是要想办法_用苹果设计的ui在win显示不明显