目前做一個項目,客戶要求可以斷點上傳,以前沒做過,求相關解決方案。

解决方案 »

  1.   

    b/s模式?C/S的 话 数据 可以按流 读入
    并记录 已经读取流的当前长度
    下次从此位置 开始 继续读取 上传.
      

  2.   

    http://www.21tx.com/dev/2004/03/26/10458.html
    http://blog.csdn.net/ayun00/archive/2006/07/11/904412.aspx
      

  3.   

    http://softgroup.blogchina.com/912009.html
    http://www.mimi163.net/cs/wenzhang/2006/2/15/610.htm
      

  4.   

    Asp.net实现多线程断点续传
    http://tech.acnow.net/Html/Web/ASPNET/ASPNET_Skill/2006-5/2/01202906520120294391464_2.shtml
    http://www.xfok.com/Tech/.Net/ASP_NET/2004/10-31/8465,34.aspx
      

  5.   

    System.IO.Stream iStream = null;            // Buffer to read 10K bytes in chunk:
                byte[] buffer = new Byte[10240];            // Length of the file:
                int length;            // Total bytes to read:
                long dataToRead;            // Identify the file to download including its path.
                string filepath  = @"E:\software\SQL Server 2000 Personal Edition.ISO";            // Identify the file name.
                string  filename  = System.IO.Path.GetFileName(filepath);            try
                {
                    // Open the file.
                    iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, 
                        System.IO.FileAccess.Read,System.IO.FileShare.Read);
                    Response.Clear();                // Total bytes to read:
                    dataToRead = iStream.Length;                long p = 0;
                    if(Request.Headers["Range"]!=null)
                    {
                        Response.StatusCode = 206;
                        p = long.Parse( Request.Headers["Range"].Replace("bytes=","").Replace("-",""));
                    }
                    if(p != 0)
                    {
                        Response.AddHeader("Content-Range","bytes " + p.ToString() + "-" + ((long)(dataToRead - 1)).ToString() + "/" + dataToRead.ToString());                    
                    }
                    Response.AddHeader("Content-Length",((long)(dataToRead-p)).ToString());
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));                iStream.Position = p;
                    dataToRead = dataToRead - p;
                    // Read the bytes.
                    while (dataToRead > 0)
                    {
                        // Verify that the client is connected.
                        if (Response.IsClientConnected) 
                        {
                            // Read the data in buffer.
                            length = iStream.Read(buffer, 0, 10240);                        // Write the data to the current output stream.
                            Response.OutputStream.Write(buffer, 0, length);                        // Flush the data to the HTML output.
                            Response.Flush();                        buffer= new Byte[10240];
                            dataToRead = dataToRead - length;
                        }
                        else
                        {
                            //prevent infinite loop if user disconnects
                            dataToRead = -1;
                        }
                    }
                }
                catch (Exception ex) 
                {
                    // Trap the error, if any.
                    Response.Write("Error : " + ex.Message);
                }
                finally
                {
                    if (iStream != null) 
                    {
                        //Close the file.
                        iStream.Close();
                    }
                       Response.End();
                }
      

  6.   

    public void download(string remFileName,string 
    locFileName,Boolean resume)
    {
    if(!logined)
    {
    login();
    }setBinaryMode(true);//Console.WriteLine("Downloading file "+remFileName+" from "+remoteHost + "/"+remotePath);if (locFileName.Equals(""))
    {
    locFileName = remFileName;
    }if(!File.Exists(locFileName))
    {
    Stream st = File.Create(locFileName);
    st.Close();
    }FileStream output = new 
    FileStream(locFileName,FileMode.Open);Socket cSocket = createDataSocket();long offset = 0;if(resume)
    {offset = output.Length;if(offset > 0 )
    {
    sendCommand("REST "+offset);
    if(retValue != 350)
    {
    //throw new IOException(reply.Substring(4));
    //Some servers may not support resuming.
    offset = 0;
    }
    }if(offset > 0)
    {
    //if(debug)
    //{
    //Console.WriteLine("seeking to " + offset);
    //}
    long npos = output.Seek(offset,SeekOrigin.Begin);
    //Console.WriteLine("new pos="+npos);
    }
    }sendCommand("RETR " + remFileName);if(!(retValue == 150 || retValue == 125))
    {
    throw new IOException(reply.Substring(4));
    }while(true)
    {bytes = cSocket.Receive(buffer, buffer.Length, 0);
    output.Write(buffer,0,bytes);if(bytes <= 0)
    {
    break;
    }
    }output.Close();
    if (cSocket.Connected)
    {
    cSocket.Close();
    }//Console.WriteLine("");readReply();if( !(retValue == 226 || retValue == 250) )
    {
    throw new IOException(reply.Substring(4));
    }}
      

  7.   

    也可以参考一下这个
    http://www.cnblogs.com/gxh973121/archive/2006/06/06/418935.html
    http://blog.csdn.net/playyuer/archive/2004/08/02/58430.aspx