امروزه بازار برنامههای تماما ajax و بدون Postback شدن صفحه بسیار داغ میباشد که از این موارد میتوان به برنامههای تحت وب گوگل اشاره کرد. (gmail ، googlePlus ، Google Reader)
در این میان یکی از دغدغههای توسعه دهندگان وب ، آپلود فایلها به صورت آنی (مثل attach files گوگل) میباشد. برای حل این مسئله ، ابزارها و پلاگینهای متعددی وجود دارد که
در اینجا به 10 تا از پلاگینهای Jquery اشاره شده است.
به شخصه با پلاگین
Uploadify کار کرده ام و از استفاده از آن راضی هستم ولی همین دیشب برای قسمتی از یک پروژه نیاز
به ابزاری جهت آپلود فایلها با امکانات مورد نظرم داشتم که به
PlUpload برخورد کردم.
از امکاناتی که این ابزار در اختیار شما قرار میدهد :
- یک اینترفیس زیبا جهت آپلود و افزودن فایل ها
- پشتیبانی از زبانهای مختلف و همین طور زبان فارسی
- امکان استفاده از قالب
Jquery UI
- Drag&Drop برای مرورگرهایی که از Html5 پشتیبانی میکنند
حال که با امکانات این ابزار بیشتر آشنا شدید بریم سراغ استفاده از این ابزار در asp.net mvc :)
ابتدا پروژه را
از اینجا دانلود کنید. سپس یک پروژهی جدید mvc 3 بسازید (از نوع Internet Application و با نام دلخواه). سپس پوشهی plupload را در قسمت سلوشن برنامه کپی کنید.
حال در فایل Views->Shared->_Layout.cshtml ، تگ head را جهت افزودن امکانات پلاگین این گونه تغییر دهید :
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<link href="../../plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css" rel="stylesheet" />
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script type="text/javascript" src="http://bp.yahooapis.com/2.4.21/browserplus-min.js"></script>
<script src="../../plupload/js/plupload.full.js"></script>
<script src="../../plupload/js/jquery.plupload.queue/jquery.plupload.queue.js"></script>
<script src="../../plupload/js/i18n/fa.js"></script>
نکته : فایل fa.js که جهت استفاده از زبان فارسی در اینترفیس آپلود فایلها میباشد، که وجود آن در آدرس واضح میباشد.
سپس به فایل Views->Home->Index.cshtml بروید و آن را این گونه دوباره نویسی کنید :
@{
ViewBag.Title = "Uploading Files using PlUpload";
}
<h2>@ViewBag.Message</h2>
@using (Html.BeginForm("Post", "home", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<div id="uploader">
<p>You browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.</p>
</div>
}
<script>
$(function () {
$("#uploader").pluploadQueue({
// General settings
runtimes: 'html5,gears,flash,silverlight,browserplus,html4',
url: '@Url.Action("Upload" , "Home")',
max_file_size: '10mb',
chunk_size: '1mb',
unique_names: true,
// Resize images on clientside if we can
resize: { width: 320, height: 240, quality: 90 },
// Specify what files to browse for
filters: [
{ title: "Image files", extensions: "jpg,gif,png" },
{ title: "Zip files", extensions: "zip" }
],
// Flash settings
flash_swf_url: '/plupload/js/plupload.flash.swf',
// Silverlight settings
silverlight_xap_url: '/plupload/js/plupload.silverlight.xap'
});
});
</script>
توضیحات و نکات :
- جهت آپلود فایلها تگ enctype = "multipart/form-data" را فراموش نکنید.
- در قسمت مقداردهی به ویژگیهای Plupload ، قسمت runtime به صورت ترتیبی کار میکند لذا اگر اولی پشتیبانی نشود سراغ دومی میرود و اگر دومی نشود سومی و ...
در صفحهی اول سایت PlUpload ، موارد پشتیبانی شده توسط تکنولوژیها آورده شده است لذا این ترتیب را ترتیب مناسبی میبینم و اگر اولین مورد html5 باشد امکان Drag&Drop وجود خواهد داشت.
خود سایت PlUpload
داکیومنت خیلی خوبی جهت توضیح موارد مختلف دارد لذا توضیح دوباره لازم نیست.
همان طور که در ویژگی url مشاهده میکنید به کنترلر Home و اکشن متود Upload اشاره شده است که طرز کار به این گونه است که هر بار که یک فایل آپلود میشود درخواستی به این آدرس و محتوای فایل در قسمت Request.Files ارسال میشود و همین طور نام فایل که unique ارسال میشود و chunk که تیکههای فایل است(پست میشود).
پس اکشنی با نام Upload در کنترلر HomeController بسازید :
[HttpPost]
public ActionResult Upload(int? chunk, string name)
{
var fileUpload = Request.Files[0];
var uploadPath = Server.MapPath("~/App_Data");
chunk = chunk ?? 0;
using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append))
{
if (fileUpload != null)
{
var buffer = new byte[fileUpload.InputStream.Length];
fileUpload.InputStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, buffer.Length);
}
}
return Content("chunk uploaded", "text/plain");
}
توضیحات : ابتدا فایل مورد نظر از قسمت Request.Files واکشی میشود و سپس فایل را در پوشه App_Data ذخیره میکند. (یکی از چندین روش ذخیره سازی که مطالعه در این قسمت به خواننده واگذار میشود.)
حال برنامه را اجرا کنید و از این ابزار لذت ببرید:)
نکته : قسمت فارسی ساز اونو تغییر دادم چون که ترجمهی فارسی خودش یه سری نقایصی داشت که گویا از کار با google translate به وجود اومده بود!