我想将文件分块来读取(比如,每块 10k 的大小),然后逐块地写回服务器(通过Webservice)。现在的问题是最终写回服务器的文件,Size好像是对的,但,打开,内容有问题。比如,读取的是一张图片,上传完成后,服务器端确实是有个图片文件生成,大小也相等,就是打开为空白。相关代码段如下,请大家指点,指点,谢谢。
读:                   FileInfo fi = new FileInfo(sFullName);
                   FileStream fs = fi.OpenRead();
                   fs.Seek(0, SeekOrigin.Begin);
                   BinaryReader r = new BinaryReader(fs);     
  byte[] temp = null;
                    iUploadTimes = (int)fs.Length / (iBaseSize * 1024);
                    long lRemainSize = fs.Length - iBaseSize * iUploadTimes * 1024;
                    if (lRemainSize > 0)
                        iUploadTimes = iUploadTimes + 1;
                    for (int i = 1; i <= iUploadTimes; i++)
                    {
                        temp = new byte[iBaseSize * 1024];
                        r.Read(temp, 0, iBaseSize * 1024);                        if (i == iUploadTimes)
                        {
                            temp = new byte[(int)lRemainSize];
                            r.Read(temp, 0, (int)lRemainSize);
                        }
                        bResult = SubmitData(temp,XX,XX,XX) // WebService接口调用                    }写:            try
            {
                string sDateStr = sSavePath.Substring(sSavePath.LastIndexOf("\\") + 1, sSavePath.Length - sSavePath.LastIndexOf("\\") - 1);
                sPhysicalPath = sSavePath + "\\" + sFileName;
                sAttchmentURL = sAttchmentURL + "/" + sDateStr + "/" + sFileName;
                FileStream fs = null;
                if (iUpLoadTimes == 1)
                {
                    fs = new FileStream(sPhysicalPath, FileMode.Create);
                    fs.Write(postArray, 0, postArray.Length);
                    fs.Close();
                }
                else
                {
                    fs = new FileStream(sPhysicalPath, FileMode.Append);
                    fs.Write(postArray, 0, postArray.Length);
                    fs.Close();
                }
             }
            catch
            {
                sAttchmentURL = "文件写入失败!";
                bIsSuccess = false;
            }

解决方案 »

  1.   

                        for (int i = 1; i <= iUploadTimes; i++) 
                        { 
                            if (i == iUploadTimes) 
                            { 
                                temp = new byte[(int)lRemainSize]; 
                                r.Read(temp, 0, (int)lRemainSize); 
                            } 
                            else
                            { 
                                   temp = new byte[iBaseSize * 1024]; 
                                r.Read(temp, 0, iBaseSize * 1024); 
                            } 
                            bResult = SubmitData(temp,XX,XX,XX) // WebService接口调用 
                        } 
      

  2.   

    没改对,更正一下:
    FileInfo fi = new FileInfo(sFullName); 
    FileStream fs = fi.OpenRead(); 
    fs.Seek(0, SeekOrigin.Begin); 
    BinaryReader r = new BinaryReader(fs);     
    byte[] temp = null; 
    iUploadTimes = (int)fs.Length / (iBaseSize * 1024); 
    long lRemainSize = fs.Length - iBaseSize * iUploadTimes * 1024; 
    for (int i = 1; i <= iUploadTimes; i++) 

        temp = new byte[iBaseSize * 1024]; 
        r.Read(temp, 0, iBaseSize * 1024); 
        bResult = SubmitData(temp,XX,XX,XX) // WebService接口调用 

    if (lRemainSize > 0) 
    {
        temp = new byte[(int)lRemainSize]; 
        r.Read(temp, 0, (int)lRemainSize); 
        bResult = SubmitData(temp,XX,XX,XX) // WebService接口调用 
    }
      

  3.   

    二进制数据通过web service分块传输好象要用MTOM编码吧
      

  4.   

    sorry,没有耐下心来看你的源代码。当使用web service做商品化程序,最好将客户端和服务器端在“行政上”分成两个项目,也就是独立去测试。当你开发客户端时,你的 SubmitData(temp,XX,XX,XX) 可以先使用一个基于本地内存来模拟BLL接口并保存数据的“假的”实现,然后在开发客户端程序时反复测试之。同样地,对服务器端的开发测试也不要用真正的客户端程序来测试,而应该有独立的测试工程来测试WebService功能方法。