مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

ahura9

عضویت از 1395/04/07

خواندن یک فیلد از جدول که داده ها بصورت بایت به بایت در آن دخیره شده اند

  • یکشنبه 13 تیر 1395
  • 12:42
تشکر میکنم

سلام خسته نباشید

من می خوام فایل رو بصورت زیپ در  بانک sql ذخیره کنم . حالا که فایل رو ذخیره می کنم نمیدونم چطور اون فیلد رو بخونم و اونو دوباره بصورت زیپ در یکی از درایوها ذخیره کنم نمونه access داخل سایت به کارم نمیاد. خواهشا بگید چطور می تونم مثلا وقتی کاربر بر اساس نام فایل جستجو کرد فیلذی که محتوای فایل در آن قرار داره رو بدست بیارم و روی دیسک بنویسم شبیه به نمونه پروژه access در سایت ممنون می شم کمکم کنید.

 private void btnbrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlgop = new OpenFileDialog();
            dlgop.Filter = "FILTER Files (.Zip)|*.zip";
            dlgop.FilterIndex = 1;
            if (dlgop.ShowDialog() == DialogResult.OK)
            {
                txtfile.Text = dlgop.FileName.Trim();               
            }
        }

        #region Save File To Database
        private void btnsave_Click(object sender, EventArgs e)
        {            
            SqlConnection cn = new SqlConnection(strconn);
            string personname = txtname.Text;
            string corp = txtcorp.Text;           
            string insert = "INSERT INTO tlbFile (Person_Name,Corporate,File_Name)" +
                    "VALUES (@personname,@corporate,@filename)";
            SqlCommand cmd = new SqlCommand(insert,cn);
            cmd.Parameters.AddWithValue("@personname",personname);
            cmd.Parameters.AddWithValue("@corporate",corp);
            cmd.Parameters.AddWithValue("@filename", ZipToByte(txtfile.Text));
     
            cn.Open();
            cmd.ExecuteNonQuery();            
            MessageBox.Show(".فایل با موفقیت در بانک ذخیره گردید");
            cn.Close(); 
        }
        #endregion


        #region File To Byte
        public static byte[] ZipToByte(String filePath)
        {
            byte[] buffer;
            FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            try
            {
                int length = (int)fileStream.Length;  // get file length
                buffer = new byte[length];            // create buffer
                int count;                            // actual number of bytes read
                int sum = 0;                          // total number of bytes read

                // read until Read method returns 0 (end of the stream has been reached)
                while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
                    sum += count;  // sum is a buffer offset for next reading
            }
            finally
            {
                fileStream.Close();
            }
            return buffer;
        }
        #endregion

اینجور دخیره اش کردم داخل بانک اما واسه خوندش مشکل دارم البته میخوام کاربر از یک فرم جداگانه بتونه فایل رو extract کنه یعنی وارد یک فرم دیگه بشه بعد بتونه اونجا جستجو بزنه و فایل رو روی دیسک بنویسه

 

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 13 تیر 1395
  • 15:02

شما باید از بانک بخونید و در جایی از سیستم ذخیره کنید و سپس Extract کنید

      string startPath = @"c:\example\start";
      string zipPath = @"c:\example\result.zip";
      string extractPath = @"c:\example\extract";

      System.IO.Compression.ZipFile.CreateFromDirectory(startPath, zipPath);
      System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath);

 

کاربر سایت

ahura9

عضویت از 1395/04/07

  • چهارشنبه 16 تیر 1395
  • 11:45

مرسی آقای مدائنی عیدتون مبارک اما من نمیدونم فایلی که توی بانک ذخیره کردم چطور از بانک بخونمش مشکلم اینه

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 16 تیر 1395
  • 14:23

عید شما هم مبارک

create table TBL_ZIP_BLOB
(
    ID unqiuidentifier primary key clustered not null
        default newid()
    ,BLOB varbinary(max) not null,
    ,NAME nvarchar(255) not null
)

public void InsertZipBlob(Guid id, byte[] bytes, string name)
{
    SqlDbCommand.CommandText = @"insert into TBL_ZIP_BLOB(BLOB,NAME) values(@blob,@name)";

    using( SqlCommand cmd = MethodToGetValidCommandObject() )
    {
        cmd.CommandText = "insert into TBL_ZIP_BLOB(ID, BLOB,NAME) values(@id,@blob,@name)";
        cmd.Parameters.Add("@id",SqlDbType.UniqueIdentifier).Value  = id;
        cmd.Parameters.Add("@blob",SqlDbType.Image).Value       = bytes;
        cmd.Parameters.Add("@name",SqlDbType.NVarChar,128).Value    = name;
        cmd.ExecuteNonQuery();
    }
}

public void SendZipBlobToResponse(Guid id, HttpResponse response)
{
    byte[] bytes = new byte[0];
    string name = "file.zip";

    using( SqlCommand cmd = MethodToGetValidCommandObject() )   
    {
        cmd.ComandText = "select BLOB,NAME from TBL_ZIP_BLOB where ID = @id";
        cmd.Parameters.Add("@id",SqlDbType.UniqueIdentifier).Value  = id;
        using( IDataReader reader = cmd.ExecuteReader() )
        {
            if( reader.Read() )
            {
                name = (string)reader["NAME"];
                bytes = (byte[])reader["BLOBIMG"];
            }
        }
    }

    if (bytes.Length > 0)
    {
        response.AppendHeader( "Content-Disposition", string.Format("attachment; filename=\"{0}\""),name);
        response.AppendHeader( "Content-Type","application/zip" );

        const int CHUNK = 1024;
        byte[] buff = new byte[CHUNK];

        for( long i=0; i<Bytes.LongLength; i+=CHUNK )
        {
            if( i+CHUNK > bytes.LongLength )
                buff = new byte[Bytes.LongLength-i];
            Array.Copy( Bytes, i, buff, 0, buff.Length );
            response.OutputStream.Write( buff, 0, buff.Length );
            response.OutputStream.Flush();
        }
    }
}

 

کاربر سایت

ahura9

عضویت از 1395/04/07

  • پنجشنبه 28 بهمن 1395
  • 13:20

سلام مهندس ببخشید تو این قسمت دارم می پرسم اما هر چی گشتم نتونستم تاپیک جدید رو پیدا کنم من موقع ریدایرکت با headerبا این پیام مواجه میشم میخوام اطلاعات کاربری رو که وارد کرد به ی صفحه مدیریت بره اما...

Warning: Cannot modify header information - headers already sent by (output started at /home/baghersc/public_html/index.php:1) in /home/baghersc/public_html/index.php on line 52

این پیام رو میده اینم بگم که:

دستور هدر رو در بالای html نوشتم

و اینکه ob_start() رو هم نوشتم

و اینکه Location رو هم با Lبزرگ نوشتم

و دیگه اینکه   ob_end_clean() رو هم برای خالی کردن بافر نوشتم یعنی تقریبا تمام موارد خطای هدر رو برطرف کردم اما باز خطا میده دیگه نمیدونم چیکار کنم ممنون میشم کمکم کنید.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)