Fork me on GitHub

Telerik RadUpload示例

FileDetail.xaml
<controls:ChildWindow x:Class="SGSGHome.Views.File.FileDetail"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
           xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
           Width="600" Height="400" 
           Title="文件上传">
    <Grid x:Name="LayoutRoot" Margin="2">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="50"/>
        </Grid.RowDefinitions>
        <telerik:RadUpload 
            x:Name="FileUpload"
            IsMultiselect="False"
            MaxWidth="600"
            telerik:StyleManager.Theme="Summer" 
            Filter="文件(office;pdf;proe;)|*.doc;*.docx;*.xls;*.xlsx;*.ppt;*.pptx;*.pdf;*.dwg;*.prt;"
            IsAutomaticUpload="false"
            OverwriteExistingFiles="True"
            TargetFolder="Upload"
            UploadServiceUrl="。。/。。/RadUploadHandler.ashx"
            FileUploaded="FileUpload_FileUploaded"
            FileUploadStarting="FileUpload_FileUploadStarting"
            AllowDrop="True"
         />
        <Button x:Name="CancelButton" Content="取消" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
        <Button x:Name="OKButton" Content="确定" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />
    </Grid>
</controls:ChildWindow>
FileDetail.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;

namespace SGSGHome.Views.File
{
    public partial class FileDetail : ChildWindow
    {
        List<string> extList = new List<string>() { 
            ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf",".dwg",".prt"
        };

        CoreService.CoreServiceClient client;

        //编辑状态
        public FormTag FormTag { get; set; }

        //分类ID
        public long CatID { get; set; }

        //重命名文件Guid
        public string FileGuid { get; set; }

        //物料编码
        public string MaterialCode { get; set; }

        //文件编号
        public string FileNo { get; set; }

        //版本
        public string FileVersion { get; set; }

        //是否加密文件
        public bool IsEncrypt { get; set; }

        //编辑记录实例
        public CoreService.FileInfo FileInfo { get; set; }
        public FileDetail()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(FileDetail_Loaded);
        }

        void FileDetail_Loaded(object sender, RoutedEventArgs e)
        {
            client = new CoreService.CoreServiceClient();
            client.AddFileInfoCompleted += new EventHandler<CoreService.AddFileInfoCompletedEventArgs>(client_AddFileInfoCompleted);
            client.UpdateFileInfoCompleted += new EventHandler<CoreService.UpdateFileInfoCompletedEventArgs>(client_UpdateFileInfoCompleted);
        }

        void client_UpdateFileInfoCompleted(object sender, CoreService.UpdateFileInfoCompletedEventArgs e)
        {

        }

        void client_AddFileInfoCompleted(object sender, CoreService.AddFileInfoCompletedEventArgs e)
        {

        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult =  false;
        }

        private void FileUpload_FileUploaded(object sender, Telerik.Windows.Controls.FileUploadedEventArgs e)
        {
            if (FormTag == FormTag.Add)
            {
                var entity = new CoreService.FileInfo();
                entity.CategoryID = this.CatID;
                entity.MaterialCode = this.MaterialCode;
                entity.FileVersion = this.FileVersion;
                entity.FileNo = this.FileNo;
                entity.FileName = System.IO.Path.GetFileNameWithoutExtension(e.SelectedFile.Name);
                entity.FileExtend = e.SelectedFile.File.Extension;
                entity.FileGuid = this.FileGuid;
                entity.FileUrl = string.Format("http://{0}/FileDownloadHandler.ashx?Guid={1}", AppContext.Host, this.FileGuid);
                entity.CreatedBy = AppContext.LogonUserName;
                entity.CreatedDate = DateTime.Now;
                entity.IsEncrypt = this.IsEncrypt;
                client.AddFileInfoAsync(entity);
            }
            else
            {
                FileInfo.FileName = System.IO.Path.GetFileNameWithoutExtension(e.SelectedFile.Name);
                FileInfo.FileExtend = e.SelectedFile.File.Extension;
                FileInfo.FileGuid = this.FileGuid;
                FileInfo.IsEncrypt = this.IsEncrypt;
                FileInfo.FileUrl = string.Format("http://{0}/FileDownloadHandler.ashx?Guid={1}", AppContext.Host, this.FileGuid);
                client.UpdateFileInfoAsync(FileInfo);
            }
        }

        private void FileUpload_FileUploadStarting(object sender, Telerik.Windows.Controls.FileUploadStartingEventArgs e)
        {
            if (!extList.Any(x => x == e.SelectedFile.File.Extension))
            {
                MessageBox.Show("文件类型不正确");
                FileUpload.CancelUpload();
            }

            this.FileGuid = Guid.NewGuid().ToString();
            e.UploadData.FileName = this.FileGuid + e.SelectedFile.File.Extension;
        }
    }
}
RadUploadHandler.ashx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SGSGHome.Web
{
    /// <summary>
    /// RadUploadHandler 的摘要说明
    /// </summary>
    public class RadUploadHandler : Telerik.Windows.RadUploadHandler
    {
        public void ProcessRequest(HttpContext context) { }
        public bool IsReusable { get { return false; } }
    }
}
FileDownloadHandler.ashx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;

namespace SGSGHome.Web
{
    /// <summary>
    /// FileDownloadHandler 的摘要说明
    /// </summary>
    public class FileDownloadHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            var fileGuid = context.Request["Guid"];
            var dt = DBHelper.ExecuteDataTable(
                string.Format(@"
                                select top 1 FileFullName=FileName+FileExtend,FileGuidName=FileGuid+FileExtend 
                                from FileInfo where FileGuid='{0}'", fileGuid));

            var fileName = dt.Rows[0]["FileFullName"].ToString();
            var filePath = context.Server.MapPath("Upload/" + dt.Rows[0]["FileGuidName"].ToString());

            context.Response.ContentType = "application/octet-stream";
            context.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
            context.Response.TransmitFile(filePath);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

 Reference:Telerik.Windows.RadUploadHandler.dll

posted @ 2012-11-23 16:09  Nick.Chung  阅读(533)  评论(0编辑  收藏  举报