服务器只接受.zip文件,如果我把一个.txt文件改为.zip文件可上传了。
如何不用后缀名来判断上传文件类型。听说要用流来控制?希望各位高手指点,麻烦了。

解决方案 »

  1.   

    分析文件头,我不太懂,我查过csdn的文档,没有关于流控制上传文件的。
    我是听人说要用流控制.请各位高手告诉我能否用流控制?能的话,如何控制。如果有流控制以外的方法,麻烦您也发出来(不用文件后缀名的方法)。
      

  2.   

    /// <summary>
    /// Creat New File in DB
    /// </summary>
    /// <param name="strNodeId"></param>
    /// <param name="file"></param>
    /// <param name="description"></param>
    /// <param name="userId"></param>
    public void creatNewFile(string strNodeId,HtmlInputFile file,string description,string userId)
    {
    Stream imgdatastream = file.PostedFile.InputStream;
    string fileName = System.IO.Path.GetFileName(file.PostedFile.FileName).Trim();
    int imgdatalen = file.PostedFile.ContentLength;
    string imgtype = file.PostedFile.ContentType;
    byte[] imgdata = new byte[imgdatalen];
    int n = imgdatastream.Read(imgdata,0,imgdatalen);
    DataBase db = new  DataBase();
    DataSet ds ;
    db.Open();

    // check DB
    string  sqlcheck  = " SELECT * FROM T_DMS_DOC ";
    sqlcheck += " WHERE NodeId  = '"+ DataBase.SqlItemTextChange(strNodeId) +"'";
    sqlcheck += " AND   DocName = '"+ DataBase.SqlItemTextChange(fileName) +"'";
    sqlcheck += " AND   DelStatus = 0"; // not deleted

    db.ExecSQL(sqlcheck,"T_DMS_DOC",out ds); if(ds.Tables.Count!= 0 && ds.Tables[0].Rows.Count !=0)
    {
    throw new Exception("1011");
    }

    // Get Document ID
    double randomStr = new System.Random().NextDouble()* 1000000000;
    string docID = DateTime.Now.ToString("yyyyMMdd") + (Math.Floor(randomStr)).ToString(); // Insert File to DB
    string sql  = " INSERT INTO T_DMS_DOC (NodeId,DocId,Version,DocName,Content,Description,UpdDate,UpdUid,CheckOut,DelStatus) ";
    sql += " VALUES( '"+ DataBase.SqlItemTextChange(strNodeId) +"','"+docID+"',1,'"+DataBase.SqlItemTextChange(fileName) +"',@imgdata,'"+DataBase.SqlItemTextChange(description)+"',GETDATE(),'"+DataBase.SqlItemTextChange(userId)+"',"+"'0','0')" ; SqlCommand command = new SqlCommand(sql,db.Connection ); SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );
    paramData.Value = imgdata;
    command.Parameters.Add( paramData ); try
    {
    // db.BeginTrans();
    // Write Log
    LogManager.WriteLog("Execute  "+command.CommandText); int numRowsAffected = command.ExecuteNonQuery(); if(numRowsAffected !=1)
    {
    throw new Exception("1012");
    } LogManager.WriteLog("Success"); //db.CommitTrans();
    }
    catch(Exception ex)
    {
    LogManager.WriteLog("Failure  "+ ex.Message);
    db.RollBack();
    throw ex;
    }
    finally
    {
    db.Close();
    }
    }
      

  3.   

    感谢两位的关注,谢谢。
    to silverseven7() :
    不好意思,我看不大懂没有注释的代码,能给我一份完整的吗?包括注释,实现步骤,需要的控件,要改写的代码等。如果可以的话,麻烦请发到我的邮箱中,谢谢了.