最近一个winform项目中需要通过拍照或者上传本地文件或者截图的方式把产品图片上传到服务器,最后选择了服务器部署webservice的方式来进行。其中遇到了一些问题记录下来。

不多说,直接上服务端代码

 [WebMethod(Description = "上传文件")]

    public bool UploadFiles(string filename, byte[] content)
{
try
{
int index = filename.LastIndexOf(".");
if (index == 0)
{
return false;
}
else
{
string extended = string.Empty;
if (index + 1 == filename.Length)
{
return false;
}
else
{
extended = filename.Substring(index + 1);
if (extended == "jpeg" || extended == "gif" || extended == "jpg" || extended == "png")
{
try
{
string Path = System.Web.HttpContext.Current.Server.MapPath("~/ProductImages/");
if (!Directory.Exists(Path))
{
Directory.CreateDirectory(Path);
} MemoryStream mymemorystream = new MemoryStream(content, 0, content.Length); File.WriteAllBytes((Path + filename), content);
return true;
}
catch (Exception ex)
{
return false;
}
}
else
{
return false;
}
}
}
}
catch
{
return false;
}
}

  这其实是一种比较通用的方式,不仅可以用来接收图片文件,也可以是其他文件。当然你也可以做一些文件大小的限制,自己添加一个判断就行。没啥好说的,问题也没有出现。

接下来说说winform这边,下图是图片上传部分

至于如何通过拍照和加载图片或者截图上传到picturebox上大家自己去找吧,网上一大堆。

接下来就是把picture的图片上传到服务器了,首先是添加服务引用,这也很简单就不说了,注意如果一个解决方案中有很多项目,而这个图片上传所在的项目不是主项目,那么需要在主项目的app.config文件中添加一个节点,否则会报找不到什么节点的错误。

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebServiceSoap" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/WebService.asmx" binding="basicHttpBinding"
bindingConfiguration="WebServiceSoap" contract="WebService.WebServiceSoap"
name="WebServiceSoap" />
</client>
</system.serviceModel>

  接下来就是上传部分了

  if (image != null&isnewimage)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Png);
byte[] bytes = new byte[ms.Length];
bytes = ms.GetBuffer();
WebService.WebServiceSoapClient webservice = new WebService.WebServiceSoapClient();
string filename = cInvCode + ".png";
if (webservice.UploadFiles(filename, bytes))
{ }
else
{
issaveok = false;
failreason = "图片上传失败!"; return;
}
}

  这里首先获取图片资源放到一个image对象中,然后转换为字节数组通过webservice上传,这里我让图片全部以png格式上传,当然你可以以其他格式上传。

刚开始在向字节数组赋值的时候我用的不是bytes = ms.GetBuffer();而是用的ms.Write(bytes, 0, (int)ms.Length);结果文件是可以上传到服务器,但是服务器端的图片文件始终打不开,说可能文件已经损坏,查了半天查不出来原因,最后发现其实还有bytes = ms.GetBuffer();这种方法,一试,问题果然解决,服务器端的图片成为可以预览查看的正常图片了。

好了,这是第一次写博客,写的不好,还请吐槽啊。

winform 通过webservice向服务器提交图片需要注意的地方的更多相关文章

  1. C# WinForm 调用WebService

    在Winform中对数据库进行操作缺乏安全性,因而可以使用Winform调用WebService来实现对数据库的各种操作. 在VS2010中,创建一个Web服务程序,第一:创建一个空的Web应用程序, ...

  2. C#winForm调用WebService的远程接口

    Web Service 的创建简单编码.发布和部署 上一篇详细概述了WebService的创建,编码,发布和部署,那么作为客户端的程序如何访问远程端的WebService 接下来看一下具体步骤:   ...

  3. Winform端上传图片到服务器

    转载自  在winform实现文件上传到服务器 webform上传文件可能大家都写过很多,一个HtmlInputFile.PostedFile.SaveAs就搞定了,不过不知道大家有没有在winfor ...

  4. C# winForm调用WebService

    C#winForm调用WebService的远程接口 创建一个WebService工程用例 添加服务引用 添加webService服务地址 输入命名空间名称 主要代码 测试成功截图 工程代码下载 新建 ...

  5. winform调用webservice假死怎么解决

    主线程调用外部web service,没有返回时,主线程阻塞了,界面肯定假死耗时操作都是要在工作线程里面执行的.一般情况下winform调用webservice时步骤1添加服务引用---高级----添 ...

  6. webservice跨服务器上传附件

    最近一个项目,用到文件上传功能,本来简单地使用upload控件直接post到服务器保存,简单实现了.后来考虑到分布是部署,静态附件.图片等内容要单独服务器(命名为B服务器,一台,192.168.103 ...

  7. winform 利用Http向服务器上传与下载文件

    利用在服务器端的IIS,布置“请求处理映射”.从而处理,本地发出Post请求.Url指向web网站所在路径的请求映射.由映射代码实现服务器保存文件. winform里面使用,WebClient的对象, ...

  8. WebService部署服务器调试时提示 “测试窗体只能用于来自本地计算机的请求”解决方法

    原因:没有开启服务器访问权限! 解决方法: 在web.config的<system.web></system.web>中加入如下配置节内容即可解决 <webService ...

  9. winform版简易http服务器

    传人url运行(url以/结尾,例如:http://localhost:8080/web/ 监听这个url// 在浏览器 中输入 http://localhost:8080/web/?name=tes ...

随机推荐

  1. 图表插件使用汇总(echarts,highchairts)

    1.echarts之饼图显示数字 option={ title: { text: '某站点用户访问来源', subtext: '纯属虚构', x: 'center' }, tooltip: { tri ...

  2. OpenVPN 通过服务器上网

    在Windows环境中架设OpenVPN服务相对比较简单,网上这方面的教程也比较丰富,照葫芦画瓢即可.但是大部分教程都只讲了如何将client与Server通过VPN管道连接起来,使client可以正 ...

  3. php和syslog

    syslog是Linux系统默认的日志守护进程.使用syslog可以方便把指定的事件写入特定文件中,可以让任何事件都登录到一台或多台服务器上. 1.简单例子,先说一下syslog怎么使用,以php为例 ...

  4. SQLite in Windows Store Apps

    Using SQLite in Windows Store Apps : https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Using-SQL ...

  5. java 获取服务器 linux 服务器IP 信息

    public String getUnixLocalIp() { String ip = ""; try { Enumeration<?> e1 = (Enumerat ...

  6. VS 2010 问题集锦

    1.Cannot find or open the PDB file 用vs2010写程序时,经常遇到:按F5,提示命令符一闪而过,且显示“Cannot find or open the PDB fi ...

  7. UI基础之UITableViewController相关

    1> 设置类型为Group - (instancetype)initWithStyle:(UITableViewStyle)style { return [super initWithStyle ...

  8. 【洛谷P1196】银河英雄传说

    有特殊意义的一道题-- 加权并查集,我们增加cnt.deep数组 分别表示i点所在链共有多少个点,以及路径压缩之前点i在链中的深度 每次合并时直接修改cnt,路径压缩的同时更新deep 因为每次查询之 ...

  9. 小试牛刀--利用豆瓣API爬取豆瓣电影top250

    最近得赶进度爬点东西,对于豆瓣,它为开发者提供了API,目前是v2版本,目前key不对个人开放,但是可以正常通过其提供的API获取数据.豆瓣V2版API权限分3类:公开.高级.商务,我们用开放基本数据 ...

  10. 编写shell脚本遇到的问题

    运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”: 原因是因为Linux下的换行符是 \n 而你在 ...