如何从字节数组中获取PDF

时间:2013-06-10 18:28:54

标签: c# wcf web-services rest

我要做的是......

让用户使用WCF选择PDF文件和其他一些文件......一旦他们选择了文件......那些文件需要从那里移动到远程服务器(公司托管)。我正在尝试反序列化数据(将其作为字节读取)并将其传输。我创建了一个表单作为测试目的,并了解我的客户端将如何工作。

当我收到文件....我可以显示文件,但我想恢复实际的PDF,我无法做到这一点。我可以在记事本中打开文件(但是它的字节格式),当我尝试用PDF打开它时,它表示不支持文件格式。我真的很困惑,不知道需要做什么。

非常感谢您的帮助。

Code Snippet:

客户端:

    private void btnUploadFile_Click(object sender, EventArgs e)
            {
            string pathServer = @"C:\Users\....\Desktop\Test.pdf";

            RestClient newClient = new      RestClient("http://localhost:...../Service1.svc/DisplayRawData");
            var request = new RestRequest(Method.GET);
            request.RequestFormat = DataFormat.Json;
            request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
            IRestResponse<TempString> newResponse = newClient.Execute<TempString>(request);
            //List<TempString> rtrn = (List<TempString>)newResponse.Data;     
            var responseData = newClient.DownloadData(request);

            FileStream fStream = new FileStream(pathServer, FileMode.Create);

            BinaryWriter bw = new BinaryWriter(fStream);

            bw.Write(responseData);
            bw.Close();

            foreach (var xbyte in responseData)
            {
               // fStream.WriteByte(xbyte); 

            }

            //fStream.Flush();
            fStream.Close(); 

Server Side (Service)

public string DisplayRawData()
        {
            string path = @"C:\basketball.pdf";
            byte[] fileToSend = File.ReadAllBytes(path);
            string filetoSendB64 = Convert.ToBase64String(fileToSend);
           // WebOperationContext.Current.OutgoingResponse.ContentType = "application/pdf";

            return filetoSendB64;
        }

Interface

        //Getting Stream from a File
        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "DisplayRawData",
                    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

        // string DisplayRawData();

        string DisplayRawData();

1 个答案:

答案 0 :(得分:1)

代码有点令人困惑,但我想说在将其写入文件之前,您需要将响应字符串从Base64解码回字节数组。