• C#WebService下载文件


    WebService项目中的Web.config配置代码

        <appSettings>
            <add key="UploadFileFolder" value="/Uploads/TestUpload/" />
        </appSettings>

    WebService项目中的ImageService.asmx代码
            /// <summary>
            /// Webservice中的下载文件处理函数
            /// </summary>
            /// <param name="filePath">文件路径</param>
            /// <returns>返回文件流</returns>
            [WebMethod(Description = "下载服务器站点文件,传递文件相对路径")]
            public byte[] DownloadFile(string strFilePath)
            {
                FileStream fs = null;
                string CurrentUploadFolderPath = Server.MapPath(ConfigurationManager.AppSettings["UploadFileFolder"]);
                string CurrentUploadFilePath = CurrentUploadFolderPath + strFilePath;
                if (File.Exists(CurrentUploadFilePath))
                {
                    try
                    {
                        ///打开现有文件以进行读取。
                        fs = File.OpenRead(CurrentUploadFilePath);
                        int b1;
                        System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
                        while ((b1 = fs.ReadByte()) != -1)
                        {
                            tempStream.WriteByte(((byte)b1));
                        }
                        return tempStream.ToArray();
                    }
                    catch (Exception ex)
                    {
                        return new byte[0];
                    }
                    finally
                    {
                        fs.Close();
                    }
                }
                else
                {
                    return new byte[0];
                }
            }

    Winform项目中的窗体下载按钮代码
            private void btnDownload_Click(object sender, EventArgs e)
            {
                string CurrentServiceFilePath = this.txtServiceFile.Text.Trim();
                string CurrentDownloadFolderPath = this.txtDownloadFolder.Text.Trim();

                if (CurrentServiceFilePath == "" || CurrentDownloadFolderPath == "")
                {
                    MessageBox.Show(DownloadImage(CurrentServiceFilePath, CurrentDownloadFolderPath));      
                }
                else if (CurrentServiceFilePath == "")
                {
                    MessageBox.Show("请填写要下载的服务器文件路径和选择本地保存目录");
                }
                else if (CurrentDownloadFolderPath == "")
                {

                    MessageBox.Show("请填写要下载的服务器文件路径和选择本地保存目录");
             
                }
            }

    Winform项目中的窗体下载按钮调用函数

            /// <summary>
            /// 通过WebService下载文件
            /// </summary>
            /// <param name="ServiceFilePath">服务器图片路径</param>
            /// <param name="DownloadFolderPath">本地图片路径</param>
            private string DownloadImage(string ServiceFilePath, string DownloadFolderPath)
            {
                try
                {
                    string DownloadFileName="";
                    if (ServiceFilePath.Contains("/"))
                    {
                        DownloadFileName=ServiceFilePath.Substring(ServiceFilePath.LastIndexOf("/"));
                    }
                    else
                    {
                        DownloadFileName = ServiceFilePath;
                    }
                    string DownloadFilePath = DownloadFolderPath +"\\"+ DownloadFileName;
                    localhost.ImageService myImageService=new localhost.ImageService();
                    byte[] bytes = myImageService.DownloadFile(ServiceFilePath);
                    if (bytes != null)
                    {
                        if (!Directory.Exists(DownloadFolderPath)) {
                            Directory.CreateDirectory(DownloadFolderPath);
                        }
                        if (!File.Exists(DownloadFilePath))
                        {
                            File.Create(DownloadFilePath).Dispose();
                        }
                        //如果不存在完整的上传路径就创建
                        FileInfo downloadInfo = new FileInfo(DownloadFilePath);
                        if (downloadInfo.IsReadOnly) { downloadInfo.IsReadOnly = false; }
                        //定义并实例化一个内存流,以存放提交上来的字节数组。
                        MemoryStream ms = new MemoryStream(bytes);
                        //定义实际文件对象,保存上载的文件。
                        FileStream fs = new FileStream(DownloadFilePath, FileMode.Create);
                        ///把内内存里的数据写入物理文件
                        ms.WriteTo(fs);
                        fs.Flush();
                        ms.Flush();
                        ms.Close();
                        fs.Close();
                        fs = null;
                        ms = null;
                    }
                    return "下载成功";
                }
                catch(Exception ex)
                {
                    return "下载失败"+ex.Message;
                }
            }


  • 相关阅读:
    [ Linux ] rsync 对异地服务器进行简单同步
    [ Skill ] 遍历整个项目设计的两个思路
    [ Skill ] 不常用的函数笔记
    [ Perl ] Getopt 使用模板
    [ Skill ] 两个 listBox 数据交换的模板
    [ Linux ] "真"后台 nohup
    [ VM ] VirtualBox 压缩 .vdi
    [ Skill ] Layout 工艺移植,还原库调用关系
    win8 hyper-v 禁用不必卸载虚拟机
    BM算法解析(计算机算法-设计与分析导论(第三版))
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306744.html
Copyright © 2020-2023  润新知