Wednesday, June 16, 2010

06/16 : Using Httphanlder to download different files

 

(1)Create a page with a link with download file path to another page download.aspx.

eg:

string url = (@"\\colpdm20\TIEMLCL Vaults\Released\00110-U1170-71-B.tif"); 
link.NavigateUrl = "~/download.aspx?fn=" + url;

(2). Create a empty download.aspx page

(3). Create Httphandler to handle downloading request

public class DownloadHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        HttpResponse Response = context.Response;
        HttpRequest Request = context.Request;

        System.IO.Stream iStream = null;

        byte[] buffer = new Byte[10240];

        int length;

        long dataToRead;

        try
        {
            string filename = Request["fn"];
                //"52110-32960-71_843789_822.JPG";
                //FileHelper.Decrypt(Request["fn"]); //通过解密得到文件名

            string filepath = Request["fn"];
//@"\\colpdm20\TIEMLCL Vaults\Released\" + filename;
                //HttpContext.Current.Server.MapPath("~/") + "files/" + filename; //待下载的文件路径

            iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
                System.IO.FileAccess.Read, System.IO.FileShare.Read);
            Response.Clear();

            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(System.Text.Encoding.GetEncoding(65001).GetBytes(Path.GetFileName(filename))));

            iStream.Position = p;
            dataToRead = dataToRead - p;

            while (dataToRead > 0)
            {
                if (Response.IsClientConnected)
                {
                    length = iStream.Read(buffer, 0, 10240);

                    Response.OutputStream.Write(buffer, 0, length);
                    Response.Flush();

                    buffer = new Byte[10240];
                    dataToRead = dataToRead - length;
                }
                else
                {
                    dataToRead = -1;
                }
            }
        }
        catch (Exception ex)
        {
            Response.Write("Error : " + ex.Message);
        }
        finally
        {
            if (iStream != null)
            {
                iStream.Close();
            }
            Response.End();
        }
    }

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

 

(4). Add following changes in web.config

<httpHandlers>
            <add verb="*" path="download.aspx" type="DownloadHandler"/>
….

</httpHandlers>

Saturday, June 12, 2010

06/12: Regex

Regex

Example 1 :

Regex URL_REGEX = new Regex(@"url\((\""|\')?(?<path>(.*))?(\""|\')?\)", RegexOptions.Compiled);

 

Meaning(from Expresso)

1.url\(

2.(\""|\')?

3.(?<path>(.*))?

4.(\""|\')?

5.\)

 

so if a string like

url(http://search.live.com//siteowner/s/siteowner/sd.png)

with this Regex

can get

 

path=http://search.live.com//siteowner/s/siteowner/sd.png)

 

Example 3:

 

Example 2 :

 

Regex test=new Regex(“\w+”);

string text=”I am dayang”

 

will get  a word[] ={“I”, “am”, “dayang”}

 

with test regex

 

Example 3:

Regex sss=new Regex(“\b(?<word>\w+)\s+(\k<word>)\b”);

 

Meaning:

1.\b :First or last character in a word

2.(?<word>\w+) :

3.\s+ : while space

4.(\k<word>)

5.\b

string text=”The the quick brown fox  fox jumped over the lazy dog dog.”

 

will get a result with

 

The The

fox fox

dog dog

Thursday, June 10, 2010

06/10: Extensibility & Scalability(ZT)

 

我想计算机专业的朋友对标题的这两个词恐怕都不陌生吧!我们会在很多文档中找出这两个词,一般是形容某某系统的优点,或者是形容某某架构的优势等等。甚至有的时候我们自己会说我们做的项目有很好的“Extensibility”和“Scalability”。

更有趣的是,这两个词经常会出现在描述同一事物上,而且单词会紧挨着。我估计以英语为母语的人会明白这二者到底指的是什么意思,但是咱们中国的IT人士是否能明白二者到底是什么意思呢?

乍一翻译过来,Extensibility是“可扩展性”,而Scalability也可以翻译成“可扩展性”或者“规模可扩展性”。反正我是这么翻译的。这么一看,这二者不意思差不多嘛!那干嘛还用两个词阿?写一个算了。

而实际并非如此,虽然Extensibility和Scalability翻译成中文很相近,但是二者却有着截然不同的内涵。

Extensibility, 表明系统设计的原则,考虑到了将来对系统实现的更改和增强。如果一个系统有很好的Extensibility,那么当对该系统某部分进行功能的添加或修改时,几乎不会影响到系统现有的其他部分。

Scalability, 表示的是当对一个系统的任务量或工作量增加时,该系统能够用一个优雅的方式来应对,而且达到了很好的效果。比如,当一个系统在增加了硬件资源之后,它的性能随之也能够成比例的提升,这就表明这个系统有很好的Scalability。

通过上面的解释,我想你差不多能明白二者到底表明什么意思了吧!虽然都有“扩展性”的意思,但是表现的方面可是不相同的。

Tuesday, June 01, 2010

06/01: Bunch Delete In SQL Server

 

BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
        DECLARE @intErrorCode INT

        begin transaction
            --SAP_FDX_Detail
            WHILE(1=1)
                Begin
                delete
                top(10000) from [SAP_FDX_Detail] where date_added<DateAdd(day,-180, GetDate())
                IF @@ROWCOUNT=0
                Begin
                    print 'SAP_FDX_Detail Records Has Been Purged' 
                    Break
                end
                end
                SELECT @intErrorCode = @@ERROR
                IF (@intErrorCode <> 0) GOTO PROBLEM

             -- SAP_FDX_Header
            WHILE(1=1)
                Begin
                delete
                top(10000) from [SAP_FDX_Header] where date_added<DateAdd(day,-180, GetDate())
                IF @@ROWCOUNT=0
                Begin
                    print 'SAP_FDX_Header Records Has Been Purged' 
                    Break
                end
                end
                SELECT @intErrorCode = @@ERROR
                IF (@intErrorCode <> 0) GOTO PROBLEM
    --SAP_FDX_Trailer
            WHILE(1=1)
                Begin
                delete
                top(10000) from [SAP_FDX_Trailer] where date_added<DateAdd(day,-180, GetDate())
                IF @@ROWCOUNT=0
                Begin
                    print 'SAP_FDX_Trailer Records Has Been Purged' 
                    Break
                end
                end
                SELECT @intErrorCode = @@ERROR
                IF (@intErrorCode <> 0) GOTO PROBLEM

      commit transaction

      PROBLEM:
        IF (@intErrorCode <> 0) BEGIN
        PRINT 'Unexpected error occurred!'
            ROLLBACK TRAN
        END

END