سلام خسته نباشید
من می خوام فایل رو بصورت زیپ در بانک 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 کنه یعنی وارد یک فرم دیگه بشه بعد بتونه اونجا جستجو بزنه و فایل رو روی دیسک بنویسه
شما باید از بانک بخونید و در جایی از سیستم ذخیره کنید و سپس 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);
مرسی آقای مدائنی عیدتون مبارک اما من نمیدونم فایلی که توی بانک ذخیره کردم چطور از بانک بخونمش مشکلم اینه
عید شما هم مبارک
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(); } } }
سلام مهندس ببخشید تو این قسمت دارم می پرسم اما هر چی گشتم نتونستم تاپیک جدید رو پیدا کنم من موقع ریدایرکت با 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() رو هم برای خالی کردن بافر نوشتم یعنی تقریبا تمام موارد خطای هدر رو برطرف کردم اما باز خطا میده دیگه نمیدونم چیکار کنم ممنون میشم کمکم کنید.
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)