winform 通过webservice向服务器提交图片需要注意的地方
最近一个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向服务器提交图片需要注意的地方的更多相关文章
- C# WinForm 调用WebService
在Winform中对数据库进行操作缺乏安全性,因而可以使用Winform调用WebService来实现对数据库的各种操作. 在VS2010中,创建一个Web服务程序,第一:创建一个空的Web应用程序, ...
- C#winForm调用WebService的远程接口
Web Service 的创建简单编码.发布和部署 上一篇详细概述了WebService的创建,编码,发布和部署,那么作为客户端的程序如何访问远程端的WebService 接下来看一下具体步骤: ...
- Winform端上传图片到服务器
转载自 在winform实现文件上传到服务器 webform上传文件可能大家都写过很多,一个HtmlInputFile.PostedFile.SaveAs就搞定了,不过不知道大家有没有在winfor ...
- C# winForm调用WebService
C#winForm调用WebService的远程接口 创建一个WebService工程用例 添加服务引用 添加webService服务地址 输入命名空间名称 主要代码 测试成功截图 工程代码下载 新建 ...
- winform调用webservice假死怎么解决
主线程调用外部web service,没有返回时,主线程阻塞了,界面肯定假死耗时操作都是要在工作线程里面执行的.一般情况下winform调用webservice时步骤1添加服务引用---高级----添 ...
- webservice跨服务器上传附件
最近一个项目,用到文件上传功能,本来简单地使用upload控件直接post到服务器保存,简单实现了.后来考虑到分布是部署,静态附件.图片等内容要单独服务器(命名为B服务器,一台,192.168.103 ...
- winform 利用Http向服务器上传与下载文件
利用在服务器端的IIS,布置“请求处理映射”.从而处理,本地发出Post请求.Url指向web网站所在路径的请求映射.由映射代码实现服务器保存文件. winform里面使用,WebClient的对象, ...
- WebService部署服务器调试时提示 “测试窗体只能用于来自本地计算机的请求”解决方法
原因:没有开启服务器访问权限! 解决方法: 在web.config的<system.web></system.web>中加入如下配置节内容即可解决 <webService ...
- winform版简易http服务器
传人url运行(url以/结尾,例如:http://localhost:8080/web/ 监听这个url// 在浏览器 中输入 http://localhost:8080/web/?name=tes ...
随机推荐
- ibatis 批量插入oracle总结
1. 使用批量插入最先想到如下的插入语句 insert into a (id,name) values('','') ,('','') 但是 oracle 并不支持这种写法 然后查询得知可以使用如下写 ...
- jquery修改table某列的值
开发的过程中,我们经常会遇到一些数和值之间的转换,比如本例:学部:1.小学,2.初中,3.高中;当然实现方法很多种,可以后台代码,也可以使用脚本... 修改前: 修改后: 代码: $("#t ...
- BZOJ2933: [Poi1999]地图
Description 一个人口统计办公室要绘制一张地图.由于技术的原因只能使用少量的颜色.两个有相同或相近人口的区域在地图应用相同的颜色.例如一种颜色k,则A(k) 是相应的数,则有: 在用颜色 ...
- Python小练习四
# 使用给定的宽度打印格式化后的价格列表 width = (int)(input('Please enter width:')) price_width = 10 item_width = width ...
- vs调试断点进不去的解决办法
原创文章,禁止转载. 断点进不去的解决办法: 确认是debug版本 确认生成了调试信息 确认在编译和连接的工程配置中指定了相同的匹配的pdb文件名,而不是默认的vc100.pdb等名字(无关) ...
- 使用DataOutputStream写入int类型数字不能显示
前段时间做Android系统项目需要使用DataOutputStream数据流向文件里写入数据,写入的有String类型和int类型.写入之后在代码中使用DataInputStream读出是没有问题的 ...
- 62. Unique Paths && 63 Unique Paths II
https://leetcode.com/problems/unique-paths/ 这道题,不利用动态规划基本上规模变大会运行超时,下面自己写得这段代码,直接暴力破解,只能应付小规模的情形,当23 ...
- 图层的核心动画(CABaseAnimation)续
Main.storyboard ViewController.m // // ViewController.m // 8A01.核心动画 // // Created by huan on 16/ ...
- 算法入门笔记------------Day2
1.开灯问题 有n盏灯,编号为1-n,第一个人把所有灯打开,第二个按下所有编号为2的倍数的开关(这些灯都被关掉),第三个人按下所有编号为3的倍数的开关,依次类推,一共有k个人,问最后有哪些灯开着?输入 ...
- myeclipse导入项目出现乱码
(1)修改整个工作空间的编码方式: Window->Preferences->General->Workspace->Text file Encoding 在 Others 里 ...