webservice能传文件吗

webservice能传文件吗,第1张

当然可以传附件了、、。。。

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 = 0i <ret.length++i)

{

DataHandler recDH = ret[i]

java.io.File receivedFile = new java.io.File(recDH.getName())//文件生成

}

3. 服务的部署:禅谨饥

注意:你要在部署的时候,定义DataHandler的序列化生成器。

编写deploy.wsdd文件晌磨:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="urn:att_STC_Server" >

<service name="urn:att_STC_Server" provider="java:RPC" >

<parameter name="className" value="samples.att_STC.att_STC_Server"/>

<parameter name="allowedMethods" value="echoDir"/>

<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/"/>

</service>

</deployment>

自己试试。

C#使用webservice把文件上传到服务器的代码如下(这里以C:\\zhidao.jpg这个文件上传为例):

WebService部分:

/// <summary>

    /// 保存文件销锋到远程服务器

    /// </summary>

    /// <param name="FileByteArray">待转换字节数组</param>

    /// <param name="FileLength">字节长度</param>

    /// <param name="SaveToUrl">保存路径</param>

    /// <returns>返回是否执行成功</returns>

    [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

    }

在服务端拿答写一个专门针对文件的方法猛清,客户端参数类型可以是Byte/DataHandler等类型,在服务端进行解析消知慧参数写入文件即可。最重要的是要设置WebService为可传递附件,默认的WebService仅仅支持一般数据类型的传递。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8189611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存