http://jingyan.baidu.com/article/b7001fe157d6b60e7382dd7f.html

因为WinForm都是运行在本地的,而我们的网站一般都是布署在服务器上,运行在服务器上的,所以在网站上面上传文件,就好似于保存文件到本地。但在WinForm上就不一样了,本章我们简单举一个在WinForm利用WebService上传文件到服务器的方法

首先们先创建一个WebService服务,该服务包含一个UpdateFile方法,该方法接收两个byte[]与string类型参数。该方法非常简单,就是按照string参数指定的路径和名称将byte[]参数值保存到服务器,代码如下:

[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class WebService : System.Web.Services.WebService { [WebMethod] public bool UpdateFile(byte[] content, string pathandname) { File.WriteAllBytes(Server.MapPath(pathandname), content); } }

为了安全,我们可以验证一下pathandname的值,使其只保存图片格式的文件。全部代码如下:

[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class WebService : System.Web.Services.WebService { [WebMethod] public bool UpdateFile(byte[] content, string pathandname) { int index = pathandname.LastIndexOf("."); if (index == 0) { return false; } else { string extended = string.Empty; if (index + 1 == pathandname.Length) { return false; } else { extended = pathandname.Substring(index + 1); if (extended == "jpeg" || extended == "gif" || extended == "jpg") { try { File.WriteAllBytes(Server.MapPath(pathandname), content); return true; } catch (Exception ex) { return false; } } else { return false; } } } } }

好了,创建完WebService后,将它布署到服务器上面,然后在Winform中添加对该服务的引用,添加方法如下:
在winform项目的引用-添加服务引用,在打开的对话框的地址栏中添加布署好的WebService地址,点击前往,验证通过后即添加成功了。如下图:

然后,我们就可以在应用程序中使用它了,为了安全,我们在winform中再次验证上传文件只可以为图片。代码如下:

private void button11_Click(object sender, EventArgs e) { OpenFileDialog fileDialog = new OpenFileDialog();

if (fileDialog.ShowDialog() == DialogResult.OK) { string extension = Path.GetExtension(fileDialog.FileName); string[] str = new string[] { ".gif", ".jpge", ".jpg" }; if (!str.Contains(extension)) { MessageBox.Show("仅能上传gif,jpge,jpg格式的图片!"); } else { FileInfo fileInfo = new FileInfo(fileDialog.FileName); if (fileInfo.Length > 20480) { MessageBox.Show("上传的图片不能大于20K"); } else { Stream file = fileDialog.OpenFile();

byte[] bytes = new byte[file.Length]; file.Read(bytes, 0, bytes.Length);

//实例化WebService服务。ServiceReference1是我们在添加引用时设置的命名空间 ServiceReference1.WebServiceSoapClient WebServiceSoapClient = new AutoPage.ServiceReference1.WebServiceSoapClient();

DateTime time = DateTime.Now; //重命名图片的名称与路径 string pathandname = "/images/" + time.ToString("yyyyMMddHHmmss") + extension; if (WebServiceSoapClient.UpdateFile(bytes, pathandname)) { MessageBox.Show("上传成功!"); this.textBox1.Text = pathandname; } else { MessageBox.Show("上传失败!"); } } } } }

怎样在winform中上传图片的更多相关文章

  1. C#基础——winform应用上传图片到SQLServer数据库

    前言 之前通过winform与SQL Server的交互一直局限于文本.数字等信息,都可以通过string的方式来传输,但是比如音乐.图片等特殊格式的文件要如何与SQL Server数据库进行交互呢? ...

  2. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  3. C# Winform 中如何实现音乐播放和视频播放

    C#  Winform 中如何实现音乐播放和视频播放 namespace WindowsFormsApplication1 { public partial class Form2 : Form { ...

  4. 另一种在WINFORM中使用XNA的方法

    之前在写化学分子模型制作程序的时候,使用一种方法,将WINFORM控件嵌入到XNA窗体中,从而实现了即使用WINFORM窗体控件又使用XNA.最近在写另一个物理运动学课件制作程序,同样使用XNA,但从 ...

  5. winform中dataGridView单元格根据值设置新值,彻底解决绑定后数据类型转换的困难

    // winform中dataGridView单元格在数据绑定后,数据类型更改困难,只能迂回实现.有时候需要将数字变换为不同的文字描述,就会出现int32到string类型转换的异常,借助CellFo ...

  6. winform中ComboBox实现text和value,使显示和值分开,重写text和value属性

    winform的ComboBox中只能赋值text,显示和值是一样的,很多时候不能满足根本需要,熟悉B/S开发的coder最常用的就是text和value分开的,而且web下DropDownList本 ...

  7. winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色

    winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色 先设置奇数行颜色,这个有个自带的属性AlternatingRowsDefaultCellStyle ...

  8. winform中button点击后再点击其他控件致使button失去焦点,此时button出现黑色边线,去掉黑色边线的方法

    winform中button点击后再点击其他控件致使button失去焦点,此时button出现黑色边线,去掉黑色边线的方法 button的FlatAppearence属性下,设置BorderSize= ...

  9. 【接上一篇】winform中dataGridView高度和宽度自适应填充完数据的高度和宽度,即dataGridView根据数据自适应大小

    上一篇:winform中dataGridView高度自适应填充完数据的高度 winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度 ...

随机推荐

  1. Spring 学习——Spring常用注解——@Component、@Scope、@Repository、@Service、@Controller、@Required、@Autowired、@Qualifier、@Configuration、@ImportResource、@Value

    Bean管理注解实现 Classpath扫描与组件管理 类的自动检测与注册Bean 类的注解@Component.@Service等作用是将这个实例自动装配到Bean容器中管理 而类似于@Autowi ...

  2. com.fasterxml.jackson.databind.JsonMappingException

    背景 在搭建SSM整合activiti项目时,在查找activiti定义的流程模板时,前台不能够接受到ProcessDefinition这个对象. 原因 ProcessDefinition是一个接口, ...

  3. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)

    2.连接相关 名称 类型 说明 Connection 指向一个数据库连接对象 Disconnected 设置为True将在数据库关闭后继续保持数据集的开启状态. 3. 数据获取 名称 类型 说明 Fe ...

  4. uniGUI试用笔记(八)

    在业务系统中常常使用回车键(Enter)替代Tab键完成焦点跳转,在uniGUI下,可以不用代码,直接使用TUniForm的NavigateKeys进行设置: 其中Next和Prior决定了焦点向下一 ...

  5. 集训DAYn——拉格朗日插值法

    看zzq大佬的博客,看到了这个看似很深奥的东西,实际很简单(反正比FFT简单,我是一个要被FFT整疯了的孩子) 拉格朗日插值法 是什么 可以找到一个多项式,其恰好在各个观测点取到观测到的值.这样的多项 ...

  6. .NET BackgroundWorker的一般使用方式

    代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  7. CF1131D tarjan,拓扑

    题目链接 541div2 http://codeforces.com/contest/1131/problem/D 思路 给出n序列和m序列的相对大小关系 构造出最大值最小的序列 缩点+拓扑 小的向大 ...

  8. What is event bubbling and capturing?

    What is event bubbling and capturing? 答案1 Event bubbling and capturing are two ways of event propaga ...

  9. [AtCode 4104] Small and Large Integers

    题目链接:https://abc093.contest.atcoder.jp/tasks/abc093_b?lang=en 这个题虽然很水,但是还是很容易踩坑,比如我,直接想到了[b,a]之间的长度和 ...

  10. Docker:Stacks

    Prerequisites Install Docker version 1.13 or higher. Get Docker Compose as described in Part 3 prere ...