PDA

View Full Version : آموزش: ذخیره فایل از هر نوعی و دانلود آن از دیتابیس



newsoft
جمعه 22 مرداد 1389, 21:49 عصر
داخل سایت در این باره زیاد هست ولی من سعی دارم کامل ویه جا در موردش بگم

مراحل اول کد دریافت فایل و تبدیل به باینری


// آپلود پیوست

FileUpload peyvast = (FileUpload)peyvastUpload;
Byte[] peyvastByte = null;

string peyvast_name = null;

if (peyvast.HasFile && peyvast.PostedFile != null)
{
//To create a PostedFile
HttpPostedFile peyvastFile = peyvastUpload.PostedFile;
//Create byte Array with file len
peyvastByte = new Byte[peyvastFile.ContentLength];
//force the control to load data in array
peyvastFile.InputStream.Read(peyvastByte, 0, peyvastFile.ContentLength);

peyvast_name = peyvast.PostedFile.FileName.ToString();

string peyvastFileExtension = System.IO.Path.GetExtension(peyvast.PostedFile.Fil eName).ToLower();
if (!((peyvastFileExtension == ".rar") || (peyvastFileExtension == ".zip") || (peyvastFileExtension == ".doc") || (peyvastFileExtension == ".docx") || (peyvastFileExtension == ".pdf") || (peyvastFileExtension == ".xls") || (peyvastFileExtension == ".xlsx") || (peyvastFileExtension == ".ppt") || (peyvastFileExtension == ".pptx") || (peyvastFileExtension == ".jpg") || (peyvastFileExtension == ".gif") || (peyvastFileExtension == ".bmp") || (peyvastFileExtension == ".png")))
{
lbl_payam.Text = "فایل شما از نوع مجاز نمی باشد";
return;
}
int size = peyvast.PostedFile.ContentLength;
int max = 10*1024*1024;
if (size > max)
{
lbl_payam.Text = "حجم فایل شما بیش از 10 مگابایت می باشد";
return;
}

}
else
{
peyvastByte = new byte[0];

}

spclass.elamie_ersal(tbx_onvan.Text.ToString(), date.intDate.ToString(), date.charDate, DropDownList1.SelectedValue.ToString(), model, "0", tbx_matn.Text.ToString(), imgByte,peyvastByte,peyvast_name);



مرحله دوم کد کلاس





//ثبت اعلان

public static void elamie_ersal(string onvan, string intdate, string chardate, string id_mozo, string type_elamie, string hazf, string matn, byte[] pic, byte[] peyvast, string peyvast_name)
{
SqlConnection connection = new SqlConnection(connectionstring);
connection.Open();
SqlCommand command1 = new SqlCommand("elamie_ersal", connection);
command1.CommandType = CommandType.StoredProcedure;
command1.Parameters.AddWithValue("onvan", onvan);
command1.Parameters.AddWithValue("intdate", intdate);
command1.Parameters.AddWithValue("chardate", chardate);
command1.Parameters.AddWithValue("id_mozo", id_mozo);
command1.Parameters.AddWithValue("type_elamie", type_elamie);
command1.Parameters.AddWithValue("hazf", hazf);
command1.Parameters.AddWithValue("matn", matn);
command1.Parameters.AddWithValue("pic", pic);
command1.Parameters.AddWithValue("peyvast", peyvast);
command1.Parameters.AddWithValue("peyvast_name", peyvast_name);
command1.ExecuteScalar();
connection.Close();


}

مرحله بعدی sp




ALTER PROCEDURE dbo.elamie_ersal
(
@onvan nvarchar(200),
@intdate int,
@chardate nvarchar(10),
@type_elamie nvarchar(4),
@id_mozo nvarchar(4),
@hazf nvarchar(100),
@pic varbinary(max),
@peyvast varbinary(max),
@peyvast_name nvarchar(200),
@matn text
)
AS


INSERT INTO elamie
(onvan, intdate,chardate,id_mozo,type_elamie, hazf,pic)
VALUES (@onvan, @intdate,@chardate,@id_mozo, @type_elamie, @hazf,@pic)
INSERT INTO elamie_matn
(matn,peyvast,peyvast_name)
VALUES (@matn,@peyvast,@peyvast_name)
فیلد رو هم از نوع varbinary بگیرین
اینو داخل وبکانفنگ بزارین تا بیشتر از 4 مگ بشه آپ کرد

<httpRuntime
maxRequestLength="1048576"
executionTimeout="3600"
/>
درآخر یه صفحه جدید که قرار دانلود داخلش انجام بشه



protected void Page_Load(object sender, EventArgs e)
{
string empno = Request.QueryString["id"].ToString();
Response.AddHeader("content-disposition", "attachment;filename=" + spclass.elamie_peyvast_name(empno));



Stream strm = ShowEmpFile(empno);

BinaryReader r = new BinaryReader(strm);
byte[] b = new byte[r.BaseStream.Length];
r.Read(b, 0, b.Length);

r.Close();
Response.BinaryWrite(b);
Response.End();

}

public Stream ShowEmpFile(string id)
{
byte[] img = spclass.elamie_peyvast(id);
try
{
return new MemoryStream((byte[])img);
}
catch
{
return null;
}

}

}



کد داخل دکمه ای که دانلود کنه



protected void lbtn_download_Click(object sender, EventArgs e)
{
Response.Redirect( "~/Download.aspx?id=" + a_idd);
}

همین سه روز وقت منو گرفت البته امید وارم با گریدویو مشکل نداشته باشه

موفق باشید

Ali_M.Eghbaldar
جمعه 22 مرداد 1389, 22:28 عصر
سلام
اینم من امروز نوشتم :لبخند::
http://www.barnamenevis.org/forum/showthread.php?t=239225