• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > Silverlight文件上传下载实现方法(下载保存)

Silverlight文件上传下载实现方法(下载保存)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了silverlight,silverlight下载,silverlight是什么,silverlight安装失败,silverlight插件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

search了非常多的文章,总算勉强实现了。有许多不完善的地方。


在HCLoad.Web项目下新建目录Pics复制一张图片到根目录下。

图片名:Bubble.jpg 右击->属性->生成操作:Resource


UC_UpDown.xaml

<UserControl x:Class="HCLoad.UC_UpDown"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  Width="500" Height="500">
  <StackPanel Background="White" Height="450">
    <Button Content="down" Click="Button_Click"></Button>
    <HyperlinkButton Content="下载保存" NavigateUri="http://localhost:4528/download.ashx?fileName=aa.txt" TargetName="_self" x:Name="lBtnDown" />
    <TextBlock x:Name="tbMsgString" Text="下载进度" TextAlignment="Center" Foreground="Green"></TextBlock>
    <Button x:Name="btnDownload" Content="DownLoad Pictures" Width="150" Height="35" Margin="15" Click="btnDownload_Click"/>
    <Border Background="Wheat" BorderThickness="5" Width="400" Height="280">
      <Image x:Name="imgDownLoad" Width="400" Height="300" Margin="15" Stretch="Fill"/>
    </Border>
    <Button x:Name="btnUpLoad" Content="UpLoad Pictures" Width="150" Height="35" Margin="15" Click="btnUpLoad_Click"/>
  </StackPanel>
</UserControl>
</div>

UC_UpDown.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using System.Windows.Media.Imaging; //因为要使用BitmapImage
using System.IO; //因为要使用Stream

namespace HCLoad
{
  public partial class UC_UpDown : UserControl
  {
    //1、WebClient 对象一次只能启动一个请求。如果在一个请求完成(包括出错和取消)前,即IsBusy为true时,进行第二个请求,则第二个请求将会抛出 NotSupportedException 类型的异常
    //2、如果 WebClient 对象的 BaseAddress 属性不为空,则 BaseAddress 与 URI(相对地址) 组合在一起构成绝对 URI
    //3、WebClient 类的 AllowReadStreamBuffering 属性:是否对从 Internet 资源接收的数据做缓冲处理。默认值为true,将数据缓存在客户端内存中,以便随时被应用程序读取



    //获取选定图片信息
    System.IO.FileInfo fileinfo;
    public UC_UpDown()
    {
      InitializeComponent();
    }
    #region 下载图片
    private void btnDownload_Click(object sender, RoutedEventArgs e)
    {
      //向指定的Url发送下载流数据请求 
      String imgUrl = "http://localhost:4528/Bubble.jpg";
      Uri endpoint = new Uri(imgUrl);

      WebClient client = new WebClient();
      client.OpenReadCompleted += new OpenReadCompletedEventHandler(OnOpenReadCompleted);
      client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(clientDownloadStream_DownloadProgressChanged);
      client.OpenReadAsync(endpoint);
    }
    void OnOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {

      //OpenReadCompletedEventArgs.Error - 该异步操作期间是否发生了错误
      //OpenReadCompletedEventArgs.Cancelled - 该异步操作是否已被取消
      //OpenReadCompletedEventArgs.Result - 下载后的 Stream 类型的数据
      //OpenReadCompletedEventArgs.UserState - 用户标识

      if (e.Error != null)
      {
        MessageBox.Show(e.Error.ToString());
        return;
      }
      if (e.Cancelled != true)
      {
        //获取下载的流数据(在此处是图片数据)并显示在图片控件中
        //Stream stream = e.Result;
        //BitmapImage bitmap = new BitmapImage();
        //bitmap.SetSource(stream);
        //imgDownLoad.Source = bitmap;
        Stream clientStream = e.UserState as Stream;
        Stream serverStream = (Stream)e.Result;
        byte[] buffer = new byte[serverStream.Length];
        serverStream.Read(buffer, 0, buffer.Length);
        clientStream.Write(buffer, 0, buffer.Length);
        clientStream.Close();
        serverStream.Close();

      }



    }

    void clientDownloadStream_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
      //DownloadProgressChangedEventArgs.ProgressPercentage - 下载完成的百分比
      //DownloadProgressChangedEventArgs.BytesReceived - 当前收到的字节数
      //DownloadProgressChangedEventArgs.TotalBytesToReceive - 总共需要下载的字节数
      //DownloadProgressChangedEventArgs.UserState - 用户标识

      this.tbMsgString.Text = string.Format("完成百分比:{0} 当前收到的字节数:{1} 资料大小:{2} ",
       e.ProgressPercentage.ToString() + "%",
       e.BytesReceived.ToString(),
       e.TotalBytesToReceive.ToString());

    }

    #endregion

    #region 上传图片
    private void btnUpLoad_Click(object sender, RoutedEventArgs e)
    {
      /**/
      /*
     *   OpenWriteCompleted - 在打开用于上传的流完成时(包括取消操作及有错误发生时)所触发的事件
     *   WriteStreamClosed - 在写入数据流的异步操作完成时(包括取消操作及有错误发生时)所触发的事件
     *   UploadProgressChanged - 上传数据过程中所触发的事件。如果调用 OpenWriteAsync() 则不会触发此事件
     *   Headers - 与请求相关的的标头的 key/value 对**
     *   OpenWriteAsync(Uri address, string method, Object userToken) - 打开流以使用指定的方法向指定的 URI 写入数据
     *     Uri address - 接收上传数据的 URI
     *     string method - 所使用的 HTTP 方法(POST 或 GET)
     *     Object userToken - 需要上传的数据流
     */


      OpenFileDialog openFileDialog = new OpenFileDialog()
      { //弹出打开文件对话框要求用户自己选择在本地端打开的图片文件
        Filter = "Jpeg Files (*.jpg)|*.jpg|All Files(*.*)|*.*",
        Multiselect = false //不允许多选 
      };

      if (openFileDialog.ShowDialog() == true)//.DialogResult.OK)
      {
        //fileinfo = openFileDialog.Files; //取得所选择的文件,其中Name为文件名字段,作为绑定字段显示在前端
        fileinfo = openFileDialog.File;

        if (fileinfo != null)
        {
          WebClient webclient = new WebClient();

          string uploadFileName = fileinfo.Name.ToString(); //获取所选文件的名字

          #region 把图片上传到服务器上

          Uri upTargetUri = new Uri(String.Format("http://localhost:4528/WebClientUpLoadStreamHandler.ashx?fileName={0}", uploadFileName), UriKind.Absolute); //指定上传地址

          webclient.OpenWriteCompleted += new OpenWriteCompletedEventHandler(webclient_OpenWriteCompleted);
          webclient.Headers["Content-Type"] = "multipart/form-data";

          webclient.OpenWriteAsync(upTargetUri, "POST", fileinfo.OpenRead());
          webclient.WriteStreamClosed += new WriteStreamClosedEventHandler(webclient_WriteStreamClosed);

          #endregion

        }
        else
        {
          MessageBox.Show("请选取想要上载的图片!!!");
        }
      }

    }



    void webclient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
    {

      //将图片数据流发送到服务器上

      // e.UserState - 需要上传的流(客户端流)
      Stream clientStream = e.UserState as Stream;
      // e.Result - 目标地址的流(服务端流)
      Stream serverStream = e.Result;
      byte[] buffer = new byte[4096];
      int readcount = 0;
      // clientStream.Read - 将需要上传的流读取到指定的字节数组中
      while ((readcount = clientStream.Read(buffer, 0, buffer.Length)) > 0)
      {
        // serverStream.Write - 将指定的字节数组写入到目标地址的流
        serverStream.Write(buffer, 0, readcount);
      }
      serverStream.Close();
      clientStream.Close();


    }

    void webclient_WriteStreamClosed(object sender, WriteStreamClosedEventArgs e)
    {
      //判断写入是否有异常
      if (e.Error != null)
      {
        System.Windows.Browser.H



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • WPF/Silverlight实现图片局部放大的方法分析
  • silverlight实现图片局部放大效果的方法
  • Silverlight文件上传下载实现方法(下载保存)
  • Silverlight将图片转换为byte的实现代码
  • 汉字转拼音缩写示例代码(Silverlight和.NET 将汉字转换成为拼音)
  • 基于Silverlight打印的使用详解,是否为微软的Bug问题
  • 浅谈Silverlight 跨线程的使用详解
  • 基于Silverlight DataGrid中无代码设置开始与结束日期DatePicker的实现方法
  • 解析Silverlight调用WCF/Rest异常的解决方法

相关文章

  • 2017-05-28C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证
  • 2017-05-28C#的回调机制浅析
  • 2017-05-28C# Dynamic关键字之:解析dynamic就是Object
  • 2017-05-28C#同步网络时间的方法实例详解
  • 2017-05-28c# Graphics使用方法(画圆写字代码)
  • 2017-05-28C# 常用日期时间函数(老用不熟)
  • 2017-05-28详解C#多线程之线程同步
  • 2017-05-28C#解析json字符串总是多出双引号的原因分析及解决办法
  • 2017-05-28C#的四个基本技巧
  • 2017-05-28C#实现刷新桌面的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#.NET 图片水印添加代码
    • C#运行时相互关系浅析
    • C#中一些你可能没用过的调试窗口的方法
    • C#实现Ping的方法小结
    • C#Url操作类封装、仿Node.Js中的Url模块实例
    • C#生成随机ArrayList的方法
    • 轻松学习C#的运算符
    • C#中foreach语句使用break暂停遍历的方法
    • C#中DataBindings用法实例分析
    • C#使用委托的步骤浅析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有