• 文件分块传输


    服务接收端: 
     
    public bool AppendChunk(string serverFileName, byte[] buff, long offset, out string errMsg)
    {
                errMsg = string.Empty;
                int maxSize =1024 * 1024;//1M
                bool result = false;
                //"D:MedicalImageipReceived"
                string ReceivePath = AppSettingHelper.Instance().AppSetting(WcfFolderEnum.RECEIVEFOLDER);
                string FilePath = Path.Combine(ReceivePath, serverFileName);
                if (buff != null && buff.Length <= maxSize)
                {
                    try
                    {
                        if (!Directory.Exists(ReceivePath))
                            Directory.CreateDirectory(ReceivePath);
                        if (offset == 0)    // 创建新文件
                            File.Create(FilePath).Close();
                        // 写入分块
                        using (FileStream fs = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                        {
                            fs.Seek(offset, SeekOrigin.Begin);
                            fs.Write(buff, 0, buff.Length);
                        }
                        result = true;
                    }
                    catch (Exception ex)
                    {
                        errMsg = string.Format("AppendChunk offset[{0}] error:{1}", offset, ex.Message);
                    }
                }
                else
                {
                    errMsg = "AppendChunk buff error,the count of bytes in buff can not  be zero or bigger than " + maxSize;
                }
                return result;
    }

    客户调用端:
     
    OpenFileDialog openFileDialog=new OpenFileDialog();
    openFileDialog.InitialDirectory="D:\";//注意这里写路径时要用c:\而不是c:
    openFileDialog.Filter="压缩文件|*.zip;*.rar";
    openFileDialog.RestoreDirectory=true;
    openFileDialog.FilterIndex=1;
    if (openFileDialog.ShowDialog()==DialogResult.OK)
    {
        TransitSVC.TransitServiceClient client=new TransitSVC.TransitServiceClient(); 
        string fName=openFileDialog.FileName;
        FileInfo file=new FileInfo(fName);
        FileStream fs = File.Open(fName, FileMode.Open, FileAccess.ReadWrite);
        string msg=String.Empty;
        byte[] bytes = new byte[0];
        BinaryReader r = new BinaryReader(fs);
        int length = (int) fs.Length;
        int size = 10 * 1024;
        if (length > size)//10K一块
        {
            int chunckCount = length % size == 0 ? length / size : (length / size) + 1;
            for (int i = 0; i < chunckCount; i++)
            {
                try
                {
                    r.BaseStream.Seek(i * size, SeekOrigin.Begin);//将文件指针设置到文件开  
                    bytes = r.ReadBytes(size);
                    if (client.AppendChunk(out msg, file.Name, bytes, i*size))
                    {
                        this.showProgress(i+1+"块传输成功");
                    }
                    else
                    {
                        this.showProgress(msg);
                    }
                }
                catch (Exception ex)
                {
                    this.showProgress(ex.Message);
                }
            }
        }
        else
        {
            try
            {
                r.BaseStream.Seek(0, SeekOrigin.Begin);
                bytes = r.ReadBytes((int)r.BaseStream.Length);
                if (client.AppendChunk(out msg, file.Name, bytes, bytes.Length))
                {
                    this.showProgress("传输成功");
                }
                else
                {
                    this.showProgress(msg);
                }
            }
            catch (Exception ex)
            {
                this.showProgress(ex.Message);
            }
        }
    }
    
    protected delegate void ShowProgress(string info);//委托方法记录信息
    protected void showProgress(string text)
    {
    if (this.InvokeRequired)
    {
        ShowProgress h = new ShowProgress(this.showProgress);
        this.BeginInvoke(h, new object[] { text });
        return;
    }
    this.textBox.Text += text + "
    ";
    this.textBox.SelectionStart = this.textBox3.Text.Length;
    this.textBox.SelectionLength = 0;
    this.textBox.ScrollToCaret();
    }
  • 相关阅读:
    document.getElementById的简便方式
    uri编解码
    javascript数组
    前端网站收藏
    html5 canvas
    interview material
    Merge into(oracle)
    机器学习入门二 ----- 机器学习术语表
    机器学习入门一 ------- 什么是机器学习,机器学习的在实际中的用处
    Dubbo 源码分析系列之一环境搭建
  • 原文地址:https://www.cnblogs.com/shi2310/p/7405898.html
Copyright © 2020-2023  润新知