PDA

View Full Version : upload تصویر بصورت ajax



xsbehx
جمعه 05 تیر 1394, 01:10 صبح
سلام
من می خوام با استفاده از fileupload داخل html و ajax موجود در jquery یک فایل رو اپلود کنم. عملیات چک کردن حجم فایل و پسوند و ... درسته فقط نمی تونم تو سمت سرور تصویر مورد نظر رو ذخیره کنم. یعنی بهش دسترسی ندارم.
کسی می تونه بگه که موقع ارسال داده تو ajax و همینطور دریافت و ذخیره کردن اون رو سرور باید چیکار کرد؟
اگر fileName رو بگیریم و ارسال کنم، چطور می تونم بر اساس اون، تصویر مورد نظر رو ذخیره کنم؟



$.ajax({
type: "POST",
url: "Default5.aspx/Insert",
data: اینجا چی بفرستم؟ آدرس موجود در فایل آپلود رو یا ؟
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function () {
alert("success");
}
});


[WebMethod]
public static void Insert(اینجا باید آدرس موجود تو فایل آپلود رو بگیرم یا ؟)
{
اینجا چی کدی بنویسیم که تصویر مورد نظر رو تو یک پوشه داخل سرور ذخیره کنم؟
}

keiv@n
جمعه 05 تیر 1394, 08:08 صبح
باید فایل رو به عنوان پارامتر ارسال کنی


var upfiles = $("#fileUploaderImgs").get(0);//این تابع باعث میشود تا المنت آپلودر به صورت یک آبجکت تبدیل شود
var uploadedfiles = upfiles.files;
var frmdata = new FormData();
for (var i = 0; i < uploadedfiles.length; i++) {
frmdata.append(uploadedfiles[i].name, uploadedfiles[i]);
}
data:frmdata,


سمت سرور :


if (context.Request.Files.Count > 0)
{
HttpFileCollection SelectedFiles = context.Request.Files;
for (int i = 0; i < SelectedFiles.Count; i++)
{
HttpPostedFile PostedFile = SelectedFiles[i];
string FilePath = context.Server.MapPath("آدرس پوشه تصاویر" + PostedFile.FileName);
PostedFile.SaveAs(FilePath);
}
}

xsbehx
جمعه 05 تیر 1394, 15:38 عصر
مشکل اینجاست که من چون با ajax دارم کار می کنم، متد مورد نظر تو سرور رو حتما باید Static کنم تا کار کنه. بهمین خاطر نمی تونم از Context استفاده کنم
من کمی تغیرش دادم ولی درست نشد. یعنی اصلا متد مورد نظر اجرا نمی شه تو سرور.
حتی اگر من قسمت Data تو ajax رو هم کمی تغییر بدم و وانطرف هم یک داده رو تو متدم دریافت کنم،حتی اگر متد مورد نظر اجرا بشه هم فایل اونطرف به سرور ارسال نمی شه و نتیجه شرط همیشه غلطه

کدهای کلاینت


$(document).on("click", "#btnTest", function () {
var upfiles = $("#fileUploader").get(0);
var uploadedfiles = upfiles.files;
var frmdata = new FormData();
for (var i = 0; i < uploadedfiles.length; i++) {
frmdata.append(uploadedfiles[i].name, uploadedfiles[i]);
}
$.ajax({
type: "POST",
url: "Default5.aspx/fnTest",
data: frmdata,
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function () {
alert("success");
}
});
});

کدها سرور:


[WebMethod]
public static void fnTest()
{
if (HttpContext.Current.Request.Files.Count > 0)
{
HttpFileCollection SelectedFiles = HttpContext.Current.Request.Files;
for (int i = 0; i < SelectedFiles.Count; i++)
{
HttpPostedFile PostedFile = SelectedFiles[i];
string FilePath = HttpContext.Current.Server.MapPath("~/Images/" + PostedFile.FileName);
PostedFile.SaveAs(FilePath);
}
}
}


به نظرتون چه کاری کنم تا درست شه؟

keiv@n
جمعه 05 تیر 1394, 17:09 عصر
منم با ایجکس کار کردم بجای وب متد جنریک گرفتم ...
تو آرگومان تابع استاتیکت یه پارامتر از نوع httpcontext تعریف کن
داخل بدنه متد ، ابجکت کانتکست یه پراپرتی داره به نام files ببین کارت را میوفته

public static void fnTest(HttpContext hp1)
{
if (hp1.Request.Files.Count > 0)
{
HttpFileCollection SelectedFiles = hp1.Request.Files;

xsbehx
جمعه 05 تیر 1394, 19:50 عصر
چون من داخل ajax دارم اینو data: frmdata می فرستم اونطرف هم سمت سرور یه نوع دیگه دارم می گیرم، خطا می ده.
با fierbug تست کردم خطای زیر رو می ده:
"Cannot convert object of type 'System.String' to type 'System.Web.HttpContext'"

نوع داده ای سمت client با server متفاوته
کلا با شرایط بالا داخل متد من نمی شه. چون فایل رو دارم بصورت پارامتر ارسال می کنم اینطوریه. مثلا اگر بخوام اسم و پسوند عکس رو بروش زیر بفرستم مشکلی نداره و اونور داده قابل استفاده است:


data: "{'hp1':'"+$('#fileUploader').val()+"'}",

public static void fnTest(string hp1)

ایمان اختیاری
شنبه 06 تیر 1394, 04:26 صبح
فک کنم مشکل من و شما شباهت زیادی به هم داره .. این پست منو ببینید یا اونجا یا اینجا همفکری کنیم مشکلامون حل بشه .
پست من (http://barnamenevis.org/showthread.php?499818-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D9%81%D8%B1%D8%A7%D8%AE%D9%88%D8%A7%D9%86%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-code-behind-%D8%AF%D8%B1-jquery)

xsbehx
یک شنبه 07 تیر 1394, 00:25 صبح
ما که نتونستیم این مشکلو حل کنیم.
مجبور شدم برم از همون روش قدیمی استفاده کنم!
حالا اگر شما احیانا بعدا تونستی این مشکلو حل کنی خوشحال می شم به هم بگید

malloc
یک شنبه 07 تیر 1394, 06:56 صبح
چون من داخل ajax دارم اینو data: frmdata می فرستم اونطرف هم سمت سرور یه نوع دیگه دارم می گیرم، خطا می ده.
با fierbug تست کردم خطای زیر رو می ده:
"Cannot convert object of type 'System.String' to type 'System.Web.HttpContext'"

نوع داده ای سمت client با server متفاوته
کلا با شرایط بالا داخل متد من نمی شه. چون فایل رو دارم بصورت پارامتر ارسال می کنم اینطوریه. مثلا اگر بخوام اسم و پسوند عکس رو بروش زیر بفرستم مشکلی نداره و اونور داده قابل استفاده است:


data: "{'hp1':'"+$('#fileUploader').val()+"'}",

public static void fnTest(string hp1)


خوب شما که نمیتونی یه formdata رو به صورت پارامتر استرینگ بفرستی سمت سرور ..... شما فقط دیتا رو برابر همون formdata بزار ..... بعد سمت سرور با httpcontext فایل ها رو بخون ....

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

sheida2012
شنبه 27 تیر 1394, 13:52 عصر
سلام دوستان میشه یه کمکی به من بکنید؟
من با asp.net یک نرم افزار تحت وب درست میکنم ولی به یه مشکلی خوردم که خیلی داره اذیتم میکنه خیلی هم وفت برای تحویلش ندارم.
مشکل اینه که توی صفحه ثبت نام چون اطلاعات زیاد بود از کنترل wizard استفاده کردم ولی متاسفانه برای آپلود عکس پرسنلی با FileUpload به مشکل خوردم چون تو wizard کنترل FileUpload همیشه خالیه از UpdatePanel و تگ Trigger اون هم استفاده کردم نشد با یه طرفندی FileUpload رو از Wizard کشیدم بیرون مشکل حل شد ولی بعد از رفع مشکلات دیکه برنامه فرم ثبت نام رو تست کردم دیدم باز به مشکل خورده باز با MultiView کنترل Wizard رو شبیه سازی کردم ولی مشکل حل نشد. بعد فهمیدم که کنترل های غیر HTML نه تو قسمت دیزاین صفحه شناخته میشن نه تو قسمت C#‎ مگر اینه دستی بنویسمشون البته برنامه موقع اجرا خطایی هم نمیده ولی تو قسمت دیزاین صفحه که داخل MasterPage قرارداره یعنی تگ Page زیرش خط خطا کشیده.
لطفاً اگه میتونید کمکم کتید خیلی عجله دارم. ممنون