نحوه عملکرد ، Ajax File Upload به همراه Progress Bar
سلام
دوستان من در این زمینه فقط نحوه عملکرد رو میخوام بدونم نیاز به کامپوننت ندارم.
میخوام بدونم فایلی که داره برای یه صفحه ارسال میشه چطور میشه فهمید که تا این لحظه چه حجمی از فایل آپلود شده.
نا گفته نمونه من به یه سری نتایج هم رسیدم و اون اینکه : از طریق جاوا اسکریپت میان فایل رو به صورت stream باز میکنن و با base64 تیکه تیکه میفرستن رجوع شود به
http://www.codeproject.com/KB/aspnet/AJAXUpload.aspx
و از طریق یه asmx یا تو نمونه های دیگه ashx میان وضعیت آپلود فایل رو کنترل میکنن.
ولی مشکل اینه که توی نمونه ای که من دیدم از ActiveXObject-ADODB.Stream استفاده شده فقط تو IE موجوده.
---------------------------
صورت مبهم کار اینه که در زمان آپلود فایل اینا چطور میان وضعیت فایل رو بررسی میکنن که تا کجا آپلود شده.
با تشکر
نقل قول: نحوه عملکرد ، Ajax File Upload به همراه Progress Bar
نقل قول:
اولین بخش داده با متد GetPreloadedEntityBody به دست میاد. این متد به طور پیش فرض 48 کیلو بایت رو بازیابی می کنه
سلام.
اینی که نقل قول کردم هنوز برام مبهمه!!!
یه سری به سایت زیر بزنید:
http://mattberseth.com/blog/2008/07/aspnet_file_upload_with_realti.html
http://mattberseth2.com/demo/Default.aspx?Name=ASP.NET+File+Upload+with+*Real-Time*+Progress+Bar&Filter=All
این آقا چطوری می تونه بایت به بایت فایلها رو Upload کنه در صورتی که در نقل قول بالا ما فقط 48 کیلوبایت رو در دسترس داریم؟
در ضمن آیا می شه این مقدار پیش فرض رو که 48 کیلوبایت هست، تغییر داد و کمترش کرد؟
نقل قول: نحوه عملکرد ، Ajax File Upload به همراه Progress Bar
نقل قول:
اینی که نقل قول کردم هنوز برام مبهمه!!!
.
.
این آقا چطوری می تونه بایت به بایت فایلها رو Upload کنه در صورتی که در نقل قول بالا ما فقط 48 کیلوبایت رو در دسترس داریم؟
در ضمن آیا می شه این مقدار پیش فرض رو که 48 کیلوبایت هست، تغییر داد و کمترش کرد؟
فقط 48 کیلو بایت در دسترس نیست امین جان!
48 کیلوبایت بافر اولیه هست که به طور پیش فرض توسط IIS برای سرآیند ها در نظر گرفته میشه!
نمایش دادن نمادین Progress برای حجم های زیر 48 کیلوبایت قابل انجام هست ولی اولین دریافت شما 48 کیلوبایت حجم داره.
موفق باشید
نقل قول: نحوه عملکرد ، Ajax File Upload به همراه Progress Bar
من مدتيه روي موضوع اين تاپيك دارم كار مي كنم
يه سري مشكلات دارم:
1. اگه فايل آپلود شده بزرگتر از 48KB يا همون PreloadedEntityBody باشه Browser در حالت آپلود ميمونه و اتفاقي نمي افته و وقتي stop زده بشه همون 48kb آپلود ميشه!
2. علاوه بر محتويات فايل، مقادير ViewState, كنترلهاي صفحه و ... هم درون فايل آپلود شده قرار ميگيره. نحوه جداسازي فايل از بقيه عناصر رو موفق نشدم عملي كنم
كدهايي كه زدم رو قرار ميدم
دوستان لطف مي كنن ايرادهاشو بهم بگن
HttpApplication application = (HttpApplication)sender;
HttpWorkerRequest request = (HttpWorkerRequest)application.Context.GetType().G etProperty("WorkerRequest", (BindingFlags)36).GetValue(application.Context, null);
if (application.Context.Request.ContentType.IndexOf(" multipart/form-data") > -1)
{
string guid = Guid.NewGuid().ToString();
string filename = application.Context.Server.MapPath("./") + guid + ".tmp";
if (request.HasEntityBody())
{
int content_length = Convert.ToInt32(request.GetKnownRequestHeader(Http WorkerRequest.HeaderContentLength));
int content_received = 0;
FileStream newFile = new FileStream(filename, FileMode.Create);
byte[] body = request.GetPreloadedEntityBody();
content_received += body.Length;
newFile.Write(body, 0, body.Length);
if (!request.IsEntireEntityBodyIsPreloaded())
{
byte[] a_buffer = new byte[1024];
int bytes_read = 1024;
while ((content_length - content_received) >= bytes_read)
{
bytes_read = request.ReadEntityBody(a_buffer, a_buffer.Length);
content_received += bytes_read;
newFile.Write(a_buffer, 0, bytes_read);
newFile.Flush();
}
bytes_read = request.ReadEntityBody(a_buffer, (content_length - content_received));
newFile.Write(a_buffer, 0, bytes_read);
content_received += bytes_read;
}
newFile.Close();
}
}
نقل قول: نحوه عملکرد ، Ajax File Upload به همراه Progress Bar
هیچ کدوم از دوستان نتونست عملی boundarray را از فایل جدا کنند ؟
من حدود دو هفته است روی این موضوع دارم کار می کنم ولی به نتیجه نرسیدم
لطفا اگر شما تونستین عملی نتیجه بگیرید اطلاع دهید