zoukankan      html  css  js  c++  java
  • 通过WebService跨平台上传大文件到服务器

    好长时间没写博客了,对最近工作中遇到的大文件上传和下载的代码贴出来和大家分享一下。

    大文件的上传的和下载是C++的平台通过调用WebService实现文件上传和下载到服务器

            /// <summary>
            /// 大文件文件上传
            /// </summary>
            /// <param name="FilePath">上传文件保存路径</param>
            /// <param name="fileB">上传的二进制流</param>
            public void AcceptFile(string FilePath, Byte[] fileB)
            {
                FileStream fStream;
                //存在该文件追加,不存在创建
                if (File.Exists(FilePath))
                {
                    fStream = new FileStream(FilePath, FileMode.Append, FileAccess.Write);
                }
                else
                {
                    fStream = new FileStream(FilePath, FileMode.Create, FileAccess.Write);
                }
                fStream.Write(fileB, 0, fileB.Length);//把二进制流转文化文件
                fStream.Close();
            }
            /// <summary>
            /// 从指定文件夹大文件下载
            /// </summary>
            /// <param name="FileName">文件名</param>
            /// <param name="StartPosition">截取的开始位置</param>
            /// <param name="num">调用的次数</param>
            /// <param name="fileB">返回的二进制流</param>
            public void DownLoadFile(string FileName, int StartPosition, int num, string FilePath, out Byte[] fileB)
            {
                string[] ResourceDir = Directory.GetFiles(FilePath);
                Byte[] ResourceByte = { 0 };
                for (int i = 0; i < ResourceDir.Length; i++)
                {
                    FileStream fStream=new FileStream(ResourceDir[i].ToString(),FileMode.Open,FileAccess.Write);
                    string ResourceName = ResourceDir[i].ToString().Substring(ResourceDir[i].LastIndexOf("\") + 1);
                    int iLen=1024*1024;//每次下载的大小,设置为1M
                    //找到要下载的文件
                    if (FileName == ResourceName)
                    {
                        if (fStream.Length - num * iLen < iLen)
                        {
                            fStream.Seek(StartPosition, 0);
                            ResourceByte = new Byte[fStream.Length - num * iLen];
                            fStream.Read(ResourceByte, 0, (int)fStream.Length - num * iLen);
                        }
                        else
                        {
                            fStream.Seek(StartPosition, 0);//读取二进制流的指定位置
                            ResourceByte = new Byte[iLen];
                            fStream.Read(ResourceByte, 0, iLen);
                        }
                        fStream.Close();
                    }
                }
                fileB = ResourceByte;
            }
  • 相关阅读:
    自定义swiper索引值的样式
    返回上一页面后页面后自动刷新(跨域也可)
    点击跳转到页面指定位置
    移动端输入框弹起影响布局(包括fixed布局情况)
    thinkPHP5模版页面volist循环offset使用
    Vue i18n国际化在实际项目中的使用
    前端Cookie、essionStorage、LocalStorage 的区别
    前端常用的一些浏览器对象
    前端取?后面的值
    前端下载文件重命名解决
  • 原文地址:https://www.cnblogs.com/ok123/p/3407570.html
Copyright © 2011-2022 走看看