如何使用web服务发送和接收excel数据

本文关键字:excel 数据 何使用 web 服务 | 更新日期: 2023-09-27 17:53:00

如何使用web服务发送和接收excel数据

我创建了一个web应用程序来发送excel文件数据到web服务。

protected void Page_Load(object sender, EventArgs e)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:58959/RESTServiceImpl.svc/PostFile");
        request.ContentType = "application/vnd.ms-excel";
        request.Headers.Add("filename", "fooBar.xls");
        request.Method = WebRequestMethods.Http.Post;
        byte[] fileData = System.IO.File.ReadAllBytes("C:''Users''Public''Documents''Forecast Pro TRAC''Input''Book1.xls");
        request.ContentLength = fileData.Length;
        using (System.IO.BinaryWriter postStream = new System.IO.BinaryWriter(request.GetRequestStream()))
        {
            postStream.Write(fileData);
            postStream.Flush();
            postStream.Close();
        }
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        System.Diagnostics.Debug.Assert(response.StatusCode == HttpStatusCode.OK);
        string responseMessage = string.Empty;
        using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
        {
            responseMessage = sr.ReadToEnd();
        }
        System.Diagnostics.Debug.WriteLine(responseMessage);
    }

现在我需要从WCF应用程序接收excel数据。所以我做了下面的代码。我得到的是我发送的总字节数。在发送和接收excel数据的两端,我需要做的确切的事情是什么?

[ServiceContract]
public interface IRESTServiceImpl
{
    [OperationContract]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "PostFile")]
    string PostFile();
}
public class RESTServiceImpl : IRESTServiceImpl
{
    public string PostFile()
    {
        var httpRequest = HttpContext.Current.Request;
        var bites = httpRequest.TotalBytes;
        return httpRequest.FilePath;
        }
}

我是一个web服务新手,这是我的第一个应用程序。所以请帮帮我吧。

如何使用web服务发送和接收excel数据

我已经解决了解决方案,这里是工作代码

public class RestServiceImpl : IRestServiceImpl
{
    public string PostFileRest(Stream fileContents)
    {
        var httpRequest = HttpContext.Current.Request;
        var filePath = "C:''file.xls";  //excel filePath for local
        var bites = httpRequest.TotalBytes;
        //Convert stream to byte array
        byte[] reqBytes = readRequest(fileContents, bites);
        byte[] decodedReqBytes = HttpUtility.UrlDecodeToBytes(reqBytes);
        string json = System.Text.Encoding.UTF8.GetString(reqBytes);
        DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
        MemoryStream stream = new MemoryStream(reqBytes);
        FileStream file = new FileStream(filePath, FileMode.Create, FileAccess.Write);
        stream.WriteTo(file);
        file.Close();
        stream.Close();
        return json ;
    }
    #region Convert Stream to byte array
    private byte[] readRequest(Stream fileContents, int bites)
    {
        System.IO.MemoryStream memStream = new System.IO.MemoryStream();
        int BUFFER_SIZE = bites;
        int iRead = 0;
        int idx = 0;
        Int64 iSize = 0;
        memStream.SetLength(BUFFER_SIZE);
        while (true)
        {
            byte[] reqBuffer = new byte[BUFFER_SIZE];
            try
            {
                iRead = fileContents.Read(reqBuffer, 0, BUFFER_SIZE);
            }
            catch (System.Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e.Message);
            }
            if (iRead == 0)
            {
                break;
            }
            iSize += iRead;
            memStream.SetLength(iSize);
            memStream.Write(reqBuffer, 0, iRead);
            idx += iRead;
        }
        byte[] content = memStream.ToArray();
        memStream.Close();
        return content;
    }
    #endregion
}

-

的接口
[ServiceContract]
public interface IRestServiceImpl
{
    [OperationContract]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "PostFileRest")]
    string PostFileRest(Stream fileContents);
}