DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 限制用戶上傳文件的容量
限制用戶上傳文件的容量
編輯:AJAX詳解     

今天策劃部提出新需求:要分等級分配會員上傳文件的空間
不僅文件要算容量,nvchar 和text字段的內容也要算容量
根據這個需求我需要建一個用戶輔表,寫好獲取空間的類,然後遍歷所有表,同步更新到用戶輔表
表結構如下:

BlogIndividuation       博客個人主頁個性化設置表

字段

類型

Null

備注

外健表

Inid

INT

Y

ID

 

UserID

Int

 

會員

 

PageFormat

Int

Y

版式定義(1-左中右,2-左右,3-中…..)

系統中存放的字典

PageFormIDs

Nvarchar(500)

 

版式組合ID字串(1,3,4|7,2|9,8)

BlogFormatInfo

PageStyleID

Int

 

用戶界面的風格ID

系統中存放的字典

PageFlashID

Int

 

用戶界面的FlashID

系統中存放的字

BlogName

Nvarchar(50)

 

博客名稱

 

BlogInfo

Nvarchar(100)

 

博客個性備注

 

BlogSaveSize

Int

 

會員博客當前空間使用大小

 

LastDate

Smalldatetime

 

修改時間

 

PageDiaryType

Int

 

博客日志模塊顯示方式,1-全文,2-摘要,3-標題,(默認為2)

 

PageDiaryNum

int

 

博客日志模塊顯示條數

 

AllAccessNum

int

 

所有訪問量

 

BlogMicUsize

Int

 

會員博客音樂占用空間(MB)

 

BlogVideoUsize

Int

 

會員博客視頻占用空間(MB)

 

BlogVocUsize

Int

 

會員博客詞占用空間(MB)

 

BlogBendUsize

Int

 

會員博客曲占用空間(MB)

 

BlogPicUsize

Int

 

會員博客圖片中用空間(MB)

 

BlogDaryUsize

Int

 

會員博客日志占用空間(MB)

 

BlogUseRiseSize

Int

 

允許會員所用最大空間(MB)

 


BlogMusic   音樂管理表z*

字段

類型

Null

備注

外健表

MusicID

INT

Y

MVID

 

MusicName

Nvarchar(30)

 

MV名稱

 

MusicURL

Nvarchar(50)

Y

MV存放目錄/a.mp3

 


BlogVideo    視頻管理表z*

字段

類型

Null

備注

外健表

VideoID

INT

Y

MVID

 

VideoName

Nvarchar(100)

 

MV名稱

 

VideoURL

Nvarchar(100)

Y

MV存放目錄/a.mp3

 

BlogVocable     詞管理表

字段

類型

Null

備注

外健表

VocableID

INT

Y

 

 

VocName

Nvarchar(100)

 

詞名稱

 

BallotNew

int

 

鮮花值(15088)/顯示順序

 

EggNew

Int

 

砸雞蛋數

 

TotalAudition

int

 

試聽計數

 

TotalDownload

int

 

下載計數

暫不用

MusicIntro

Nvarchar(1000)

 

作品介紹

 

BlogBend     曲管理表

字段

類型

Null

備注

外健表

BendID

INT

Y

 

 

BendName

Nvarchar(30)

 

曲名稱

 

MusicURL

Nvarchar(50)

Y

MV存放目錄/a.mp3

 

6.3.1   BlogAlbum  相冊管理表z*

列名

數據類型

備注

Null

AlbumID

INT

相冊ID

Y

AlbumName

Nvarchar(100)

相冊名稱(默認為”我的相冊”) shooting\ shooting2

 

UserID

INT

相冊所屬會員ID

 

CreateTime

smallDateTime

相冊創建時間

 

Taxic

Float

排序

 

AlbumInfo

Nvarchar(100)

相冊簡介

 

UpdateTime

smallDateTime

更新時間

 

AlbUMLable

Nvarchar(100)

標簽

 

AlbumTopPic

Nvarchar(100)

相冊封面

 

注:會員在第一次初始化博客時,系統自動插入一條記錄

 

 

6.3.2   BlogAlbumPic        相冊圖片表z*

列名

數據類型

備注

Null

PicID

INT

相冊圖片ID

Y

PhotoName

Nvarchar(100)

照片名稱

 

SmallPhotoLink

Nvarchar255)

縮略圖存放地址

 

6.2.1   BlogDiary    博客會員日志表z*

列名

數據類型

Null

備注

外健表

DiaryID

INT

 

 

UserID

Int

 

會員ID

UserInfo

DiaryTag

Nvarchar(200)

 

日志標簽(a,c,b,d)

 

Title

Nvarchar(100)

 

日志標題

 

Content

Ntext(16)

 

日志內容

 

  
獲取空間的類很簡單就是 枚舉幾種類型 不同的枚舉類型去找相應的文件相對路徑計算出空間大小或計算出字段的字節。

然後遍歷所有表,同步更新到用戶輔表:
這是個比較大的操作,要保證效率我首先想到批處理,要解決不超時我覺得AJax可能比較好
下面是代碼:
public class InitSpaceSize : Common.PageBase
 {
  protected System.Web.UI.WebControls.DataGrid DataGrid1;
  Common.FileOp.FileSize fo=new Common.FileOp.FileSize();
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   AjaxPro.Utility.RegisterTypeForAJax(typeof(InitSpaceSize));
  }

  #region Web 窗體設計器生成的代碼
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 該調用是 ASP.Net Web 窗體設計器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 設計器支持所需的方法 - 不要使用代碼編輯器修改
  /// 此方法的內容。
  /// </summary>
  private void InitializeComponent()
  {    
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion


  private DataTable UniteFiles()
  {
      fo.DummyPath="../";
   string strSql=@"
       Select MusicURL as BlogMicUsize,'0' as BlogVideoUsize,'0' as BlogVocUsize,'0' as BlogBendUsize,'0' as BlogPicUsize
       ,'0' as BlogDaryUsize ,UserID from BlogMusic where MusicURL !=''
       union Select '0' as BlogMicUsize,VideoURL as BlogVideoUsize,'0' as BlogVocUsize,'0' as BlogBendUsize
       ,'0' as BlogPicUsize,'0' as BlogDaryUsize,UserID from BlogVideo where VideoURL !=''
       union Select '0' as BlogMicUsize,'0' as BlogVideoUsize,MusicIntro as BlogVocUsize,'0' as BlogBendUsize
       ,'0' as BlogPicUsize,'0' as BlogDaryUsize,UserID from BlogVocable  where MusicIntro!=''
       Union Select '0' as BlogMicUsize,'0' as BlogVideoUsize,'0' as BlogVocUsize
       ,MusicURL as BlogBendUsize,'0' as BlogPicUsize,'0' as BlogDaryUsize,UserID
       from BlogBend  where MusicURL !=''
       Union 
       Select '0' as BlogMicUsize,'0' as BlogVideoUsize,'0' as BlogVocUsize
       ,'0' as BlogBendUsize,PhotoLink as BlogPicUsize,'0' as BlogDaryUsize,UserID
       from BlogAlbum,BlogAlbumPic where BlogAlbumPic.AlbumID=BlogAlbum.AlbumID and PhotoLink !=''    
       ";
   IStatement dbment = Db.CreateStatement(strSql);
   DataTable dt = dbment.GetDataTable();
   if(dt!=null)
   {
    for(int i=0;i<dt.Rows.Count;i++)
    {
     if(dt.Rows[i]["BlogMicUsize"].ToString()!="0")
     {

      fo.FileName=dt.Rows[i]["BlogMicUsize"].ToString();
      dt.Rows[i]["BlogMicUsize"]=fo.GetFileSize(Common.FileOp.enumFilePath.BlogMicUsize);
     }
     else if(dt.Rows[i]["BlogVideoUsize"].ToString()!="0")
     {
      fo.FileName=dt.Rows[i]["BlogVideoUsize"].ToString();
      dt.Rows[i]["BlogVideoUsize"]=fo.GetFileSize(Common.FileOp.enumFilePath.BlogVideoUsize);
     }
     else if(dt.Rows[i]["BlogVocUsize"].ToString()!="0")
     {
      fo.FileName=dt.Rows[i]["BlogVocUsize"].ToString();
      dt.Rows[i]["BlogVocUsize"]=fo.GetFileSize(Common.FileOp.enumFilePath.BlogVocUsize);
     }
     else if(dt.Rows[i]["BlogBendUsize"].ToString()!="0")
     {
      fo.FileName=dt.Rows[i]["BlogBendUsize"].ToString();
      dt.Rows[i]["BlogBendUsize"]=fo.GetFileSize(Common.FileOp.enumFilePath.BlogBendUsize);
     }
     else if(dt.Rows[i]["BlogPicUsize"].ToString()!="0")
     {
      fo.FileName=dt.Rows[i]["BlogPicUsize"].ToString();
      dt.Rows[i]["BlogPicUsize"]=fo.GetFileSize(Common.FileOp.enumFilePath.BlogPicUsize);
     }
     string sqlstr = string.Format(@"Insert Into TempUserSpace (BlogMicUsize,BlogVideoUsize,BlogVocUsize,BlogBendUsize,BlogPicUsize,UserID)
     Values('{0}','{1}','{2}','{3}','{4}','{5}')"
     ,decimal.Parse(dt.Rows[i]["BlogMicUsize"].ToString()),decimal.Parse(dt.Rows[i]["BlogVideoUsize"].ToString()),decimal.Parse(dt.Rows[i]["BlogVocUsize"].ToString())
     ,decimal.Parse(dt.Rows[i]["BlogBendUsize"].ToString()),decimal.Parse(dt.Rows[i]["BlogPicUsize"].ToString()),int.Parse(dt.Rows[i]["UserID"].ToString()));

     IStatement dbment1 = Db .CreateStatement (sqlstr);

     dbment1.Update();

    }

   }

   return dt;
  }
  private void UniteFilesGroup()
  {
    string >strSql=@"Select  
      Sum(BlogMicUsize) as BlogMicUsize 
     ,Sum(BlogVideoUsize) as BlogVideoUsize 
     ,Sum(BlogVocUsize) as BlogVocUsize 
     ,Sum(BlogBendUsize) as BlogBendUsize 
     ,Sum(BlogPicUsize) as BlogPicUsize 
     ,UserID
     from  TempUserSpace
     Group By UserID
     order by UserID desc";
   IStatement dbment = Db.CreateStatement(strSql);
   DataTable dt = dbment.GetDataTable();
   if(dt!=null)
   {
    for(int i=0;i<dt.Rows.Count;i++)
    {
     string sqlstr = string.Format(@"Update BlogIndividuation Set BlogMicUsize='{0}',BlogVideoUsize='{1}'
      ,BlogVocUsize='{2}',BlogBendUsize='{3}',BlogPicUsize='{4}' Where UserID='{5}'"
      ,decimal.Parse(dt.Rows[i]["BlogMicUsize"].ToString()),decimal.Parse(dt.Rows[i]["BlogVideoUsize"].ToString()),decimal.Parse(dt.Rows[i]["BlogVocUsize"].ToString())
      ,decimal.Parse(dt.Rows[i]["BlogBendUsize"].ToString()),decimal.Parse(dt.Rows[i]["BlogPicUsize"].ToString()),int.Parse(dt.Rows[i]["UserID"].ToString()));

     IStatement dbment1 = Db .CreateStatement (sqlstr);

     dbment1.Update();
    }

   }
  }

  private void UniteBlogFiles()
  {
   fo.DummyPath="../";
   string strSql=@"
       Select Content as BlogDaryUsize,UserID from  BlogDiary Where   Content is not null
       ";
   IStatement dbment = Db.CreateStatement(strSql);
   DataTable dt = dbment.GetDataTable();
   if(dt!=null)
   {
    for(int i=0;i<dt.Rows.Count;i++)
    {
     if(dt.Rows[i]["BlogDaryUsize"].ToString()!="0")
     {

      fo.FileName=dt.Rows[i]["BlogDaryUsize"].ToString();
      dt.Rows[i]["BlogDaryUsize"]=fo.GetFileSize(Common.FileOp.enumFilePath.BlogDaryUsize);
     }
     string sqlstr = string.Format(@"Insert Into TempBlogSpace (BlogDaryUsize,UserID)
     Values('{0}','{1}')"
      ,decimal.Parse(dt.Rows[i]["BlogDaryUsize"].ToString()),int.Parse(dt.Rows[i]["UserID"].ToString()));

     IStatement dbment1 = Db .CreateStatement (sqlstr);

     dbment1.Update();

    }

   }
           this.UniteBlogGroup();
  }
  private void UniteBlogGroup()
  {
   string >strSql=@"Select  
      Sum(BlogDaryUsize) as BlogDaryUsize 
     ,UserID
     from  TempBlogSpace
     Group By UserID
     order by UserID desc";
   IStatement dbment = Db.CreateStatement(strSql);
   DataTable dt = dbment.GetDataTable();
   if(dt!=null)
   {
    for(int i=0;i<dt.Rows.Count;i++)
    {
     string sqlstr = string.Format(@"Update BlogIndividuation Set BlogDaryUsize='{0}' Where UserID='{1}'"
      ,decimal.Parse(dt.Rows[i]["BlogDaryUsize"].ToString()),int.Parse(dt.Rows[i]["UserID"].ToString()));

     IStatement dbment1 = Db .CreateStatement (sqlstr);

     dbment1.Update();
    }

   }
  }

  [AjaxPro.AJaxMethod()]
  public void InitUserSpaces()
  {
   this.UniteFiles();
   this.UniteFilesGroup();
   this.UniteBlogFiles(); 
  }

總結:解決過程中遇到3個問題:
1,博客會員日志表 BlogDiary 的Content是text類型 無法進行 Union操作 所以我分2步實現
2, Union後的DataTable 我想再Group By排序 但沒實現了 ,只好插入臨時表
3,插入臨時表的時候 我想把DataTable插到數據庫 也沒實現了 ,只好for循環

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved