webservice接口可以传文件吗,利用webservice怎么上传文件
webservice接口可以传文件吗,利用webservice怎么上传文件详细介绍
本文目录一览: 如何通过Web Services上传和下载文件
随着Internet技术的发展和跨平台需求的日益增加 Web Services的应用越来越广 我们不但需要通过Web Services传递字符串信息 而且需要传递二进制文件信息 下面 我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器
一 通过Web Services显示和下载文件
我们这里建立的Web Services的名称为GetBinaryFile 提供两个公共方法 分别是GetImage()和GetImageType() 前者返回二进制文件字节数组 后者返回文件类型 其中 GetImage()方法有一个参数 用来在客户端选择要显示或下载的文件名字 这里我们所显示和下载的文件可以不在虚拟目录下 采用这个方法的好处是 可以根据权限对文件进行显示和下载控制 从下面的方法我们可以看出 实际的文件位置并没有在虚拟目录下 因此可以更好地对文件进行权限控制 这在对安全性有比较高的情况下特别有用 这个功能在以前的ASP程序中可以用Stream对象实现 为了方便读者进行测试 这里列出了全部的源代码 并在源代码里进行介绍和注释
首先 建立GetBinaryFile a *** x文件
我们可以在VS NET里新建一个C#的aspxWebCS工程 然后 添加新项 选择 Web服务 并设定文件名为 GetBinaryFile a *** x 在 查看代码 中输入以下代码 即 GetBinaryFile a *** x cs
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Diagnostics;
using System Web;
using System Web UI;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// GetBinaryFile 的摘要说明
/// Web Services名称 GetBinaryFile
/// 功能 返回服务器上的一个文件对象的二进制字节数组
///
[WebService(Namespace=
Description= 在Web Services里利用 NET框架进行传递二进制文件 )]
public class GetBinaryFile : System Web Services WebService
{
#region Component Designer generated code
//Web 服务设计器所必需的
private IContainer ponents = null;
///
/// 清理所有正在使用的资源
///
protected override void Dispose( bool disposing )
{
if(disposing &&ponents != null)
{
ponents Dispose();
}
base Dispose(disposing);
}
#endregion
public class Images: System Web Services WebService
{
///
/// Web 服务提供的方法 返回给定文件的字节数组
///
[WebMethod(Description= Web 服务提供的方法 返回给定文件的字节数组 )]
public byte[] GetImage(string requestFileName)
{
///得到服务器端的一个图片
///如果你自己测试 注意修改下面的实际物理路径
if(requestFileName == null || requestFileName == )
return getBinaryFile( D:\Picture JPG );
else
return getBinaryFile( D:\ + requestFileName);
}
///
/// getBinaryFile 返回所给文件路径的字节数组
///
///
public byte[] getBinaryFile(string filename)
{
if(File Exists(filename))
{
try
{
///打开现有文件以进行读取
FileStream s = File OpenRead(filename);
return ConvertStreamToByteBuffer(s);
}
catch(Exception e)
{
return new byte[ ];
}
}
else
{
return new byte[ ];
}
}
///
/// ConvertStreamToByteBuffer 把给定的文件流转换为二进制字节数组
///
///
public byte[] ConvertStreamToByteBuffer(System IO Stream theStream)
{
int b ;
System IO MemoryStream tempStream = new System IO MemoryStream();
while((b =theStream ReadByte())!= )
{
tempStream WriteByte(((byte)b ));
}
return tempStream ToArray();
}
[WebMethod(Description= Web 服务提供的方法 返回给定文件类型 )]
public string GetImageType()
{
///这里只是测试 您可以根据实际的文件类型进行动态输出
return image/jpg ;
}
}
}
}
观看地址 进入讨论组讨论
一旦我们创建了上面的a *** x文件 进行编译后 我们就可以编写客户端的代码来进行调用这个Web Services了
我们先 添加Web引用 输入 下面 我们编写显示文件的中间文件 GetBinaryFileShow aspx 这里 我们只需要在后代码里编写代码即可 GetBinaryFileShow aspx cs文件内容如下
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Drawing;
using System Web;
using System Web SessionState;
using System Web UI;
using System Web UI WebControls;
using System Web UI HtmlControls;
using System Web Services;
namespace aspxWebCS
{
///
/// GetBinaryFileShow 的摘要说明
///
public class GetBinaryFileShow : System Web UI Page
{
private void Page_Load(object sender System EventArgs e)
{
// 在此处放置用户代码以初始化页面
///定义并初始化文件对象
aspxWebCS GetBinaryFile Images oImage;
oImage = new aspxWebCS GetBinaryFile Images();
///得到二进制文件字节数组
byte[] image = oImage GetImage( );
///转换为支持存储区为内存的流
System IO MemoryStream memStream = new System IO MemoryStream(image);
///定义并实例化Bitmap对象
Bitmap bm = new Bitmap(memStream);
///根据不同的条件进行输出或者下载
Response Clear();
///如果请求字符串指定下载 就下载该文件
///否则 就显示在浏览器中
if(Request QueryString[ Download ]== )
{
Response Buffer = true;
Response ContentType = application/octet stream ;
///这里下载输出的文件名字 ok jpg 为例子 你实际中可以根据情况动态决定
Response AddHeader( Content Disposition attachment;filename=ok jpg );
}
else
Response ContentType = oImage GetImageType();
Response BinaryWrite(image);
Response End();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN 该调用是 ASP NEeb 窗体设计器所必需的
//
InitializeComponent();
base OnInit(e);
}
///
/// 设计器支持所需的方法 不要使用代码编辑器修改
/// 此方法的内容
///
private void InitializeComponent()
{
this Load += new System EventHandler(this Page_Load);
}
#endregion
}
}
最后 我们就编写最终的浏览页面 GetBinaryFile aspx 这个文件很简单 只需要aspx文件即可 内容如下
<%@ Page language="c#" Codebehind="GetBinaryFile.aspx.cs" AutoEventWireup="false"
Inherits="aspxWebCS.GetBinaryFile" %> Inherits= aspxWebCS GetBinaryFile %>
runat= server > runat= server >下载文件
收藏地址:进入讨论组讨论
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Diagnostics;
using System Web;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// Upload 的摘要说明
///
[WebService(Namespace=
Description= 在Web Services里利用 NET框架进上载文件 )]
public class Upload : System Web Services WebService
{
public Upload()
{
//CODEGEN 该调用是 ASP NEeb 服务设计器所必需的
InitializeComponent();
}
#region Component Designer generated code
//Web 服务设计器所必需的
private IContainer ponents = null;
///
/// 设计器支持所需的方法 不要使用代码编辑器修改
/// 此方法的内容
///
private void InitializeComponent()
{
}
///
/// 清理所有正在使用的资源
///
protected override void Dispose( bool disposing )
{
if(disposing &&ponents != null)
{
ponents Dispose();
}
base Dispose(disposing);
}
#endregion
[WebMethod(Description= Web 服务提供的方法 返回是否文件上载成功与否 )]
public string UploadFile(byte[] fs string FileName)
{
try
{
///定义并实例化一个内存流 以存放提交上来的字节数组
MemoryStream m = new MemoryStream(fs);
///定义实际文件对象 保存上载的文件
FileStream f = new FileStream(Server MapPath( ) + \
+ FileName FileMode Create);
///把内内存里的数据写入物理文件
m WriteTo(f);
m Close();
f Close();
f = null;
m = null;
return 文件已经上传成功 ;
}
catch(Exception ex)
{
return ex Message;
}
}
}
}
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Drawing;
using System Web;
using System Web SessionState;
using System Web UI;
using System Web UI WebControls;
using System Web UI HtmlControls;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// Upload 的摘要说明
/// 利用该方法通过Web Services上载文件
///
public class Upload : System Web UI Page
{
protected System Web UI HtmlControls HtmlInputFile MyFile;
protected System Web UI WebControls Button Button ;
private void Page_Load(object sender System EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN 该调用是 ASP NEeb 窗体设计器所必需的
//
InitializeComponent();
base OnInit(e);
}
///
/// 设计器支持所需的方法 不要使用代码编辑器修改
/// 此方法的内容
///
private void InitializeComponent()
{
this Button Click += new System EventHandler(this Button _Click);
this Load += new System EventHandler(this Page_Load);
}
#endregion
private void Button _Click(object sender System EventArgs e)
{
///首先得到上载文件信息和文件流
if(MyFile PostedFile != null)
{
System Web HttpFileCollection oFiles;
oFiles = System Web HttpContext Current Request Files;
if(oFiles Count < )
{
Response Write ( 请选择文件 );
Response End();
}
string FilePath = oFiles[ ] FileName;
if(FilePath == || FilePath == null)
{
Response Write ( 请选择一个文件 );
Response End();
}
string FileName = FilePath Substring(FilePath LastIndexOf( \ )+ );
try
{
///处理上载的文件流信息
byte[] b = new byte[oFiles[ ] ContentLength];
System IO Stream fs;
aspxWebCS Upload o;
o = new aspxWebCS Upload();
fs = (System IO Stream)oFiles[ ] InputStream;
fs Read(b oFiles[ ] ContentLength);
///调用Web Services的UploadFile方法进行上载文件
Response Write(o UploadFile(b FileName));
fs Close();
}
catch(Exception ex)
{
Response Write(ex Message);
}
}
else
{
Response Write( 请选择文件 );
}
}
}
}
最后 需要注意的是 在保存文件时 您应该确保指定文件的完整路径(例如 C:MyFilesPicture jpg ) 并确保为 ASP NET使用的帐户提供要存储文件的目录的写权限 上载大文件时 可使用 元素的 maxRequestLength 属性来增加文件大小的最大允许值 其中 maxRequestLength 指示 ASP NET 支持的HTTP方式上载的最大字节数 该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击 指定的大小以 KB 为单位 默认值为 KB ( MB) executionTimeout 指示在被 ASP NET 自动关闭前 允许执行请求的最大秒数 在当文件超出指定的大小时 如果浏览器中会产生 DNS错误或者出现服务不可得到的情况 也请修改以上的配置 把配置数加大
另外 上载大文件时 还可能会收到以下错误信息
aspnet_wp exe (PID: ) 被回收 因为内存消耗超过了 MB(可用 RAM 的百分之 )
如果遇到此错误信息 请增加应用程序的 nfig 文件的 元素中 memoryLimit 属性的值
lishixinzhi/Article/program/net/201311/12410
webservice 可以传文件吗
当然可以传附件了、、。。。
axis用过吧?版本1就可以
将你要传送的文件封装在DataHandler中,然后将DataHandler对象或DataHandler数组(多个文件传送的时候)作为客户端调用函数的参数(从客户端上传文件到服务器)Axis服务的返回类型(从服务器端下载文件到客户端)进行传输。
1.服务端程序:
假设传输多个文件:在服务器端将文件取出来,并将文件封装在DataHandler数组中。
代码如下:
DataHandler[] ret = new DataHandler[totalFileNum];
... ...
java.io.File myFile = new java.io.File(filePath);
if(myFile.isFile() && myFile.canRead())
{
String fname = myFile.getAbsoluteFile().getCanonicalPath();
DataHandler[0] = new DataHandler(new FileDataSource(fname));
}
... ...
return ret;
2. 客户端的访问:
代码如下:
Service service = new Service();
Call call = (Call) service.createCall();
URL myURL = new URL("http://192.168.0.26:8080/axis/servlet/AxisServlet");
call.setTargetEndpointAddress(myURL); //设定服务的主机和位置
call.setOperationName(new QName("urn:MyAttachServer","echoDir")); //设置要调用的服务的方法
QName qnameAttachment = new QName("urn:MyAttachServer","DataHandler");
call.registerTypeMapping(DataHandler.class, qnameAttachment, JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class); //为附件(即DataHandler类)创建序列化生成器
call.addParameter("source", XMLType.XSD_STRING ,ParameterMode.IN); //设置服务调用方法的传入参数类型
call.setReturnType(XMLType.SOAP_ARRAY); //设置调用服务方法的返回类型,由于返回的是DataHandler数组,所以设置为SOAP_ARRAY类型
javax.activation.DataHandler[] ret = (javax.activation.DataHandler[])call.invoke(new Object[]{null}); //调用方法
for (i = 0; i < ret.length; ++i)
{
DataHandler recDH = ret[i];
java.io.File receivedFile = new java.io.File(recDH.getName()); //文件生成
}
3. 服务的部署:
注意:你要在部署的时候,定义DataHandler的序列化生成器。
编写deploy.wsdd文件:
<typemapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"
serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
自己试试。
怎么用WebService传输XML文件
1.xml 本身不就是个文本吗,字符串参数就可以呀?
2.将xml文件中的内容通过base64编码后再作为byte[]参数进行传送。
3.还有一种方式是用 SAAJ ,将文件内容作为SOAP包中的附件形式传送。但这个好像不是webserviece了。
WebService中文件传输
WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传输的。
1、 首先编写服务器端上传文件的WebService方法
package com.hoo.service;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.activation.DataHandler;
/**
* function:Axis WebService完成文件上传服务器端
* @author hoojo
* @createDate Dec 18, 2010 1:16:16 PM
* @file UploadFileService.java
* @package com.hoo.service
* @project AxisWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class UploadFileService {
/**
* function:传递文件
* @author hoojo
* @createDate Dec 18, 2010 1:27:58 PM
* @param handler DataHandler这个参数必须
* @param fileName 文件名称
* @return upload Info
*/
public String upload(DataHandler handler, String fileName) {
if (fileName != null && !"".equals(fileName)) {
File file = new File(fileName);
if (handler != null) {
InputStream is = null;
FileOutputStream fos = null;
try {
is = handler.getInputStream();
fos = new FileOutputStream(file);
byte[] buff = new byte[1024 * 8];
int len = 0;
while ((len = is.read(buff)) > 0) {
fos.write(buff, 0, len);
}
} catch(FileNotFoundException e) {
return "fileNotFound";
} catch (Exception e) {
return "upload File failure";
} finally {
try {
if (fos != null) {
fos.flush();
fos.close();
}
if (is != null) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return "file absolute path:" + file.getAbsolutePath();
} else {
return "handler is null";
}
} else {
return "fileName is null";
}
}
}
上传方法和我们以前在Web中上传唯一不同的就是参数一DataHandler,可以将这类看成文件传输器,他可以把文件序列化。然后通过DataHandler可以得到一个输入流InputStream,通过这个流可以读到文件的内容。其他的操作和普通上传类似。
2、 定制wsdd发布文件上传的WebService服务
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<operation name="upload" qname="operNS:upload" xmlns:operns="upload" returntype="rns:string"
xmlns:rns="http://www.w3.org/2001/XMLSchema">
<typemapping qname="hns:DataHandler" xmlns:hns="ns:FileUploadHandler"
languageSpecificType="java:javax.activation.DataHandler"
serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
上面才xml节点元素在前面都见过了,说明下operation中的参数,注意要指定参数类型,特别是DataHandler的类型,然后就是typeMapping的serializer、deserializer的序列化和反序列化工厂类的配置。
3、 用dos命令发布当前WebService
C:\SoftWare\tomcat-5.0.28\tomcat-5.0.28\webapps\AxisWebService\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployUpload.wsdd
发布完成后,可以通过这个地址查看uploadFile这个service了
http://localhost:8080/AxisWebService/servlet/AxisServlet
4、 编写客户端代码
package com.hoo.client;
import java.rmi.RemoteException;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
/**
* function:上传文件WebService客户端
*
* @author hoojo
* @createDate Dec 18, 2010 1:38:14 PM
* @file UploadFileClient.java
* @package com.hoo.client
* @project AxisWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class UploadFileClient {
public static void main(String[] args) throws ServiceException, RemoteException {
String url = "http://localhost:8080/AxisWebService/services/UploadFile";
String fileName = "readMe.txt";
String path = System.getProperty("user.dir") + "\\WebRoot\\" + fileName;
System.out.println(path);
//这样就相当于构造了一个带文件路径的File了
DataHandler handler = new DataHandler(new FileDataSource(path));
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
/**
* 注册异常类信息和序列化类 ns:FileUploadHandler 和 wsdd 配置文件中的typeMapping中的xmlns:hns="ns:FileUploadHandler" 的对应 DataHandler
* 和 wsdd 配置文件中的typeMapping中的qname="hns:DataHandler"的DataHandler对应
*/
QName qn = new QName("ns:FileUploadHandler", "DataHandler");
call.registerTypeMapping(DataHandler.class, qn,
JAFDataHandlerSerializerFactory.class,
JAFDataHandlerDeserializerFactory.class);
call.setOperationName(new QName(url, "upload"));
//设置方法形参,注意的是参数1的type的DataHandler类型的,和上面的qn的类型是一样的
call.addParameter("handler", qn, ParameterMode.IN);
call.addParameter("fileName", XMLType.XSD_STRING, ParameterMode.IN);
//设置返回值类型,下面2种方法都可以
call.setReturnClass(String.class);
//call.setReturnType(XMLType.XSD_STRING);
String result = (String) call.invoke(new Object[] { handler, "remote_server_readMe.txt" });
System.out.println(result);
}
}
至此,文件传输就完成了。怎么样,还不错吧!
如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不统一,解决方法如下:
删除Java EE 5 Libraries/javaee.jar/mail里的包有东西.
具体方法如下:
用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar,然后删除mail,一切就ok了.
webservice怎么传递xml
WebService中文件传输
WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传输的。
1、 首先编写服务器端上传文件的WebService方法
package com.hoo.service;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.activation.DataHandler;
/**
* function:Axis WebService完成文件上传服务器端
* @author hoojo
* @createDate Dec 18, 2010 1:16:16 PM
* @file UploadFileService.java
* @package com.hoo.service
* @project AxisWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class UploadFileService {
/**
* function:传递文件
* @author hoojo
* @createDate Dec 18, 2010 1:27:58 PM
* @param handler DataHandler这个参数必须
* @param fileName 文件名称
* @return upload Info
*/
public String upload(DataHandler handler, String fileName) {
if (fileName != null && !"".equals(fileName)) {
File file = new File(fileName);
if (handler != null) {
InputStream is = null;
FileOutputStream fos = null;
try {
is =
利用webservice怎么上传文件
1. Web Service 简介
Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
(Web Service 在此不做过多介绍,具体介绍可百度下)
2. WEB Service 开发
2.1. 服务配置
Asp.Net 一般支持上传4MB大小文件,为实现上传超过4MB大小文件,Asp.Net项目需要调整配置(Web.Config)的httpRuntime节点。
maxRequestLength:指定输入流缓冲阈值限制(以 KB 为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发送大型文件而导致的拒绝服务攻击。
默认值为 4096 (4 MB)。
executionTimeout: 指定在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。默认值110秒。
2.2. 服务开发
本人采用接收字节的方式开发Web Service,提供是创建还是累加参数,根据参数将文件字节写入文件中。示例代码如下:
3. WinForm 程序开发
WinForm是·Net开发平台中对Windows Form的一种称谓。新增WinForm程序项目,添加文件上传服务引用。
3.1. Winform 程序实现效果
程序界面简单设计为:选择文件按钮,选择文件列表,上传文件按钮、上传信息及上传进度。
webservice 怎么传输文件
在服务端写一个专门针对文件的方法,客户端参数类型可以是Byte/DataHandler等类型,在服务端进行解析参数写入文件即可。最重要的是要设置WebService为可传递附件,默认的WebService仅仅支持一般数据类型的传递。
如何通过WebService批量上传多个大文件
采用接收字节的方式开发Web Service,提供是创建还是累加参数,根据参数将文件字节写入文件中。示例代码如下:
WinForm 程序开发
WinForm是·Net开发平台中对Windows Form的一种称谓。新增WinForm程序项目,添加文件上传服务引用。
Winform 程序实现效果
程序界面简单设计为:选择文件按钮,选择文件列表,上传文件按钮、上传信息及上传进度。
Winform 上传文件效果
示例演示:选择两大于4MB文件进行上传,上传成功。
文件上传关键源码
localhost.WebService mWebService = new WinTest.localhost.WebService();
mWebService.CookieContainer = new System.Net.CookieContainer();
mWebService.Timeout =- 1;
对 XML Web services 的同步调用的超时(以毫秒为单位)。默认为 100000 毫秒。提示:如果将 Timeout 属性设置为 Timeout =-1,则指示该请求无超时。
如何通过WebService批量上传大文件
Asp.Net一般支持上传4MB大小文件,为实现上传超过4MB大小文件,Asp.Net项目需要调整配置(Web.Config)的httpRuntime节点。maxRequestLength:指定输入流缓冲阈值限制(以KB为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发
Asp.Net
一般支持上传4MB大小文件,为实现上传超过4MB大小文件,Asp.Net项目需要调整配置(Web.Config)的httpRuntime节点。
maxRequestLength:指定输入流缓冲阈值限制(以 KB
为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发送大型文件而导致的拒绝服务攻击。
默认值为 4096 (4 MB)。
executionTimeout: 指定在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。默认值110秒。
2.2. 服务开发
本人采用接收字节的方式开发Web Service,提供是创建还是累加参数,根据参数将文件字节写入文件中。示例代码如下:
步骤阅读
3. WinForm 程序开发
WinForm是·Net开发平台中对Windows Form的一种称谓。新增WinForm程序项目,添加文件上传服务引用。
文件上传关键源码
localhost.WebService mWebService = new WinTest.localhost.WebService();
mWebService.CookieContainer = new System.Net.CookieContainer();
mWebService.Timeout =- 1;
对 XML Web services 的同步调用的超时(以毫秒为单位)。默认为 100000 毫秒。提示:如果将 Timeout 属性设置为
Timeout =-1,则指示该请求无超时。
C#使用webservice把文件上传到服务器
存放程序里面的存放路径要为绝对路径。不能用相对路径。
使用二进制流的模式长传保存
C#使用webservice把文件上传到服务器的代码如下(这里以C:\\zhidao.jpg这个文件上传为例):
WebService部分:
///
///
待转换字节数组 ///
字节长度 ///
保存路径 ///
返回是否执行成功
[WebMethod(Description = "保存文件到远程服务器.")] public bool SaveFile(byte[] FileByteArray,int FileLength, string SaveToUrl) { try { FileStream fs = new FileStream(SaveToUrl, FileMode.OpenOrCreate, FileAccess.Write); fs.Write(FileByteArray, 0, FileLength); fs.Close(); } catch { return false; } return true; }上传文件调用部分:
protected void Button1_Click(object sender, EventArgs e) { MangerPhoto.Service mp = new MangerPhoto.Service(); Response.Write(mp.SaveFile(getByte(), FileUpload1.PostedFile.ContentLength, "C:\\zhidao.jpg")); } private byte[] getByte() {//获得转化后的字节数组 //得到用户要上传的文件名 string strFilePathName = FileUpload1.PostedFile.FileName; string strFileName = Path.GetFileName(strFilePathName); int FileLength = FileUpload1.PostedFile.ContentLength; //上传文件 Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组 Stream StreamObject = FileUpload1.PostedFile.InputStream; //建立数据流对像 //读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度 StreamObject.Read(FileByteArray, 0, FileLength); return FileByteArray; }
如何向webservice里传递数据
1、webservice部署后连接中心数据库 2、需要本地后台客户端,读取本地数据,然后通过报文的形式发送给webservice,webservice接收后插入数据库中