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

智能推荐

openmv学习日记(二)openmv4 H7_openmv4 h7 cam-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏81次。今天先介绍一下openmv4 H7的相关资料文章目录简介引脚电路图板子信息尺寸规格功耗温度范围简介openmv4 H7具有:STM32H743VI ARM Cortex M7 处理器,480 MHz ,1MB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。并且还有以下的IO接口:1.全速 USB (12Mbs) 接口,连接到电脑。当插入Open..._openmv4 h7 cam

机器学习与数据挖掘网上资源搜罗——良心推荐-程序员宅基地

文章浏览阅读509次。前面我曾经发帖推荐过网上的一些做“图像处理和计算机视觉的”有料博客资源,原帖地址图像处理与机器视觉网络资源收罗——倾心大放送http://blog.csdn.net/baimafujinji/article/details/32332079做机器学习和数据挖掘方面的研究和开发,常会在线搜索一些资源,日积月累便挖出了一堆比较牛的博主,特别说明:做这个方向的

windows10和kali linux双系统的安装_kali系统和win可以共同吗-程序员宅基地

文章浏览阅读1.5w次,点赞14次,收藏92次。0x00 准备工具1、容量8G及以上的U盘2、kali linux镜像下载 - 下载地址:https://www.kali.org/downloads/3、镜像刻录软件Win32 Disk Imager - 下载地址:https://win32-disk-imager.en.lo4d.com/4、硬盘分区助手 - 下载地址:https://www.disktool.cn/5、制作引导工具..._kali系统和win可以共同吗

毕业设计django新闻发布和评论管理系统-程序员宅基地

文章浏览阅读587次,点赞6次,收藏14次。因为媒体的宣传能够带给我们重要的信息资源,新闻发布和评论管理是国家管理机制重要的一环,,面对这一世界性的新动向和新问题,新闻发布如何适应新的时代和新的潮流,开展有效的信息服务工作,完成时代赋予的新使命?在新闻发布和评论管理系统开发之前所做的市场调研及其他的相关的管理系统,都是没有任何费用的,都是通过开发者自己的努力,所有的工作的都是自己亲力亲为,在碰到自己比较难以解决的问题,大多是通过同学和指导老师的帮助进行相关信息的解决,所以对于新闻发布和评论管理系统的开发在经济上是完全可行的,没有任何费用支出的。

python中set详解_python set-程序员宅基地

文章浏览阅读1.7w次,点赞44次,收藏177次。python中set方法详解以及案例说明超详细_python set

【贝壳】数据分析岗位笔试+四面面经_贝壳如果去新的城市扩张需要看哪些指标-程序员宅基地

文章浏览阅读1.3w次,点赞5次,收藏16次。贝壳是今年秋招得第一个offer,因此回馈网友,记录一下贝壳得笔试+四面:【笔试】笔试是去公司现场面之前,给的一套题目,包括一下几题:1.找出数据中的错误数据,并给出理由2.贝壳如果去新的城市扩张,需要看哪些指标3.聚类分析有哪几种,说说其中一种得原理以及计算步骤4.一道SQL,需要用到rank()函数即可笔试不刷人,然后直接带着自己做的笔试卷子,去一面【一面】1.万年自我介绍..._贝壳如果去新的城市扩张需要看哪些指标

随便推点

HTTP方式在线访问Hadoop HDFS上的文件解决方案

为了通过HTTP方式在线访问HDFS上的文件,您可以利用WebHDFS REST API或者HttpFS Gateway这两种机制实现。1:httpfs是cloudera公司提供的一个hadoop hdfs的一个http接口,通过WebHDFS REST API 可以对hdfs进行读写等访问2:与WebHDFS的区别是不需要客户端可以访问hadoop集群的每一个节点,通过httpfs可以访问放置在防火墙后面的hadoop集群3:httpfs是一个Web应用,部署在内嵌的tomcat中。

WordPress优化Google广告加载速度_wordpress 怎么做谷歌优化-程序员宅基地

文章浏览阅读236次。网站的快速加载是良好用户体验和搜索引擎优化的要素之一,但每当谷歌AdSense的广告代码部署到网站上时,速度都会显着下降,这是因为要下载大量文件才能显示广告,并且其中包含大量无用、被墙的请求及代码。_wordpress 怎么做谷歌优化

c# controls.add 控件的使用 ,间接引用还是值引用_this.controls.add-程序员宅基地

文章浏览阅读8.6k次。c# controls.add 控件的使用 10函数内部用下面代码增加控件:Button btn = new Button();btn.Location = new Point( 20, 20);btn.Size = new Size( 60,40);btn.Text = "btn'sText";this.Controls.Add( btn );问题:函数执行完后,bt_this.controls.add

占位式插件化一Activity的跳转_activity跳转 插件-程序员宅基地

文章浏览阅读329次。原理宿主APP安装在手机中的APP,并且通过该APP加载插件中的Activity插件APP没有安装的apk,通过宿主直接打开其内部Activity标准(协议)宿主APP和插件APP通信的桥梁。宿主APP通过一个空壳Activity(代理Activity)加载插件app中的Activity,实际上插件app中的Activity并没有入栈,也没法入栈,因为插件app没有安装,没有上下文和..._activity跳转 插件

PTA 剥洋葱(C语言 + 详细注释 + 代码超简单)_c语言pta怎么使用-程序员宅基地

文章浏览阅读1.0k次,点赞9次,收藏13次。输入格式:一行,一个整数,即图形的层数输出格式:如上述图形输入样例:3输出样例:AAAAAABBBAABCBAABBBAAAAAA//打印图形题关键是找规律,一般只需两重循环(行循环、列循环)#include<stdio.h>#include<string.h>int main() { int i, n; char ..._c语言pta怎么使用

docker配置国内镜像源_docker国内镜像源-程序员宅基地

文章浏览阅读3.3w次,点赞9次,收藏25次。刚开始学习docker,发现下载镜像非常的慢。如果不经过,docker的镜像下载都来源于国外,因此需要配置国内的镜像源。Docker中国区官方镜像。_docker国内镜像源