ورود

View Full Version : آپلود فایلهای حجم بالا در sql server



mashhadpix
یک شنبه 27 مرداد 1392, 08:12 صبح
سلام
من می خواهم در sql server 2008 فایلهای با حجم تقریبا 10MB آپلود کنم ولی این کار انجام نمی پذیرد. مقدار datatype مربوط به فیلد را تغییر دادم ولی همچنان درست کار نمی کند و هنگام آپلود سایت بسته میشود.
باید چه کاری انجام بدم که وقتی فایلهایی با حجم بالا آپلود کردم دیگری مشکلی پیش نیاد.
ممنون میشم یکی بتونه منو راهنمایی کنه؟

aghayex
یک شنبه 27 مرداد 1392, 09:18 صبح
تا الان این کار انجام ندادم و به شما هم توصیه نمی کنم فایل ها رو در بانک ذخیره کنید

mashhadpix
یک شنبه 27 مرداد 1392, 11:36 صبح
تا الان این کار انجام ندادم و به شما هم توصیه نمی کنم فایل ها رو در بانک ذخیره کنید

منظورم اینه که من یک فایل 1 مگابایتی را در فرم وبم می خواهم آپلود کنم در ویژوال استدیو 2010 مشکلی نداره از این بابت ولی وفتی این فایل به مثلا 10 مگابایت می رسد مشکل پیش میاد و وبسایت بسته میشه.
من با VS2010 و SQl Server 2008 کار می کنم.
فکر کردم از مقدار datatype است که اونم عوض کردم درست نشد.
راه حلش چیست؟

Reza_Yarahmadi
یک شنبه 27 مرداد 1392, 15:42 عصر
یعنی چی فرم بسته میشه؟ DataType چیه؟ اگر خطا میده متن خطا چیه؟
مطمئنید مشکل به دیتابیس مربوطه؟

in_chand_nafar
یک شنبه 27 مرداد 1392, 21:21 عصر
به این پادکست صوتی فارسی گوش دهید. در ضمن برای راهنمایی بهتر متن خطا را در سایت قرار دهید
ذخیره سازی داده های باینری و چالش های مربوط به آن (http://www.nikamooz.com/%D8%A7%D9%85%DA%A9%D8%A7%D9%86%D8%A7%D8%AA/radionikamooz/61-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C-%D9%88-%DA%86%D8%A7%D9%84%D8%B4-%D9%87%D8%A7%DB%8C-%D9%85%D8%B1%D8%A8%D9%88%D8%B7-%D8%A8%D9%87-%D8%A2%D9%86.html)

mashhadpix
دوشنبه 28 مرداد 1392, 06:52 صبح
یعنی چی فرم بسته میشه؟ DataType چیه؟ اگر خطا میده متن خطا چیه؟
مطمئنید مشکل به دیتابیس مربوطه؟

وقتی فایلهای حجم بالا می خواهم تو ویژوال استدیو که به sql server وصل شده آپلود کنم. وقتی دکمه آپلود را می زنم به صورت زیر می شود:
109306
مشکل کجاست و باید چه کاری انجام دهم.
ممنون میشم راهنمایی کنید.

Reza_Yarahmadi
دوشنبه 28 مرداد 1392, 07:34 صبح
DataType شما چیه؟

mashhadpix
دوشنبه 28 مرداد 1392, 09:05 صبح
datatype مربوط به فایلی که می خواهم آپلود کنم: varchar(150) است.
فقط فایلهایی با حجم بالا مشکل دارم.
ممنون میشم راهنمایی کنید.

Reza_Yarahmadi
دوشنبه 28 مرداد 1392, 11:08 صبح
برای ذخیره فایل یا از (VarBinary(MAX استفاده کنید یا از FileStream (هر دو موضوع توی سایت بصورت کامل توضیح داده شده)
برای امتحان این موضوع DataType رو به (VarBinary(MAX تغییر بدید . در صورت درست شدن با توجه به شرایط کاری یکی از روشها رو انتخاب کنید

درصورت استفاده از VarBinary میتونید بصورت Partial (تیکه تیکه) فایل رو ذخیره کنید.

mashhadpix
دوشنبه 28 مرداد 1392, 12:00 عصر
برای ذخیره فایل یا از (VarBinary(MAX استفاده کنید یا از FileStream (هر دو موضوع توی سایت بصورت کامل توضیح داده شده)
برای امتحان این موضوع DataType رو به (VarBinary(MAX تغییر بدید . در صورت درست شدن با توجه به شرایط کاری یکی از روشها رو انتخاب کنید

درصورت استفاده از VarBinary میتونید بصورت Partial (تیکه تیکه) فایل رو ذخیره کنید.

چرا باید به صورت باینری باشد، مگه به صورت varchar باشه استفاده نمیشه کرد؟
یه کم جستجو کردم به اون چیزی که میخاستم نرسیدم. همه گفتن یه کاری رو انجام بدم ولی با فایلهای با حجم بالا باید چیکار کنم؟
ممنون میشم راهنمایی بفرمایید.

Reza_Yarahmadi
دوشنبه 28 مرداد 1392, 14:15 عصر
چرا باید به صورت باینری باشد، مگه به صورت varchar باشه استفاده نمیشه کرد؟
VarChar واسه داده های رشته ای (متون لاتین) کاربرد داره.(که برای متون فارسی باید از NVarChar استفاده کرد)
شما دارید میگید فایل ؛ فایلها را باید بصورت باینری ذخیره کرد نه رشته ای!
10MB خیلی حجیم به حساب نمیاد. (VarBinary(MAX قابلیت ذخیره فایلهای 2GB رو داره و اگه از قابلیت FileTable استفاده کنید که تا حجم درایو انتخابی میتونید فایل ذخیره کنید.(این قابلیت در SQL Server 2012 ارائه شده)

mashhadpix
سه شنبه 29 مرداد 1392, 07:56 صبح
VarChar واسه داده های رشته ای (متون لاتین) کاربرد داره.(که برای متون فارسی باید از NVarChar استفاده کرد)
شما دارید میگید فایل ؛ فایلها را باید بصورت باینری ذخیره کرد نه رشته ای!
10MB خیلی حجیم به حساب نمیاد. (VarBinary(MAX قابلیت ذخیره فایلهای 2GB رو داره و اگه از قابلیت FileTable استفاده کنید که تا حجم درایو انتخابی میتونید فایل ذخیره کنید.(این قابلیت در SQL Server 2012 ارائه شده)

حالا من می خواهم در sql server 2008 فایلهای حداکثر 100mb بتونند آپلود کنند. راهنمایی کامل؟

درصورت استفاده از VarBinary میتونید بصورت Partial (تیکه تیکه) فایل رو ذخیره کنید.
یعنی چی تیکه تیکه؟
ممنون میشم راهنمایی کنید.

Reza_Yarahmadi
سه شنبه 29 مرداد 1392, 14:00 عصر
حالا من می خواهم در sql server 2008 فایلهای حداکثر 100mb بتونند آپلود کنند. راهنمایی کامل؟
خدمتتون عرض کردم (VarBinary(MAX تا 2GB قابلیت ذخیره سازی اطلاعات داره، اگر حجم اکثر فایلهای شما به 256KB نمیرسه از همون (VarBinary(MAX بصورت معمول استفاده کنید ولی اگه بیشتره بهتر اینه که از FileStream استفاده کنید.

اگه از نوع داده (VarBinary(MAX استفاده کنید (FileStream این قابلیت رو نداره) میتونید فایل رو بصورت پارت پارت ذخیره کنید. به این صورت که پارت اول رو با دستور Insert ذخیره و پارت های بعدی با دستور Update به فیلد مورد نظر اضافه میکنید. برای دستور Update بصورت زیر میشه عمل کرد
Update YourTable Set BinaryField.Write(@BinaryData, @Offset, @Length) Where ID = @ID
توی این حالت :
اگه وسط کار ارتباط قطع بشه میشه بعد از وصل مجدد عملیات ادامه پیدا کنه.
در وب میشه با استفاده از Ajax علاوه بر ذخیره سازی پارت پارت ، با استفاده از یک ProgressBar پیشرفت رو به کاربر نشون داد.

mashhadpix
سه شنبه 29 مرداد 1392, 14:28 عصر
خدمتتون عرض کردم (VarBinary(MAX تا 2GB قابلیت ذخیره سازی اطلاعات داره، اگر حجم اکثر فایلهای شما به 256KB نمیرسه از همون (VarBinary(MAX بصورت معمول استفاده کنید ولی اگه بیشتره بهتر اینه که از FileStream استفاده کنید.

اگه از نوع داده (VarBinary(MAX استفاده کنید (FileStream این قابلیت رو نداره) میتونید فایل رو بصورت پارت پارت ذخیره کنید. به این صورت که پارت اول رو با دستور Insert ذخیره و پارت های بعدی با دستور Update به فیلد مورد نظر اضافه میکنید. برای دستور Update بصورت زیر میشه عمل کرد
Update YourTable Set BinaryField.Write(@BinaryData, @Offset, @Length) Where ID = @ID
توی این حالت :
اگه وسط کار ارتباط قطع بشه میشه بعد از وصل مجدد عملیات ادامه پیدا کنه.
در وب میشه با استفاده از Ajax علاوه بر ذخیره سازی پارت پارت ، با استفاده از یک ProgressBar پیشرفت رو به کاربر نشون داد.

مدیر این بخش خواهشن راهنمایی بفرمایید، شاید من اشتباه انجام میدهم ولی در هر صورت درست اجرا نمیشه.
شما می فرمایید پارت به پارت، یادم رفت بگم فایلها معمولا pdf هستن.
بعدش شما می فرمایید:
VarChar واسه داده های رشته ای (متون لاتین) کاربرد داره. فایل می خواهم آپلود کنم متن که نیست انگلیسی باشه یا فارسی.
من این کدی که گفته بودید برای update نوشتم بازم کار نکرد:
"Update Articles Set BinaryField.Write ArticleTitle=@ArticleTitle,ArticleText=@ArticleTex t,ArticleImage=@ArticleImage,FileName=@FileName Where ArticleID=" +
ID;


از این اصلا نمی خواهم استفاده کنم چون لازم ندارم:
با استفاده از یک ProgressBar پیشرفت رو به کاربر نشون داد. در ضمن نوع داده را به (VarBinary(MAX تغییر می دهم اصلا کلان خطا میگیره و پیغام خطا :
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query

پیغام خطا میگه که باید تبدیل بشه.

اگر از این طریق نمیشه، ممنون میشم از طریق FileStream خودتون توضیح بفرمایید. تو انجمن چیزی پیدا نکردم.
ممنون میشم هر چه سریع به این سوال من به صورت واضح پاسخ دهید

Reza_Yarahmadi
سه شنبه 29 مرداد 1392, 16:53 عصر
شما می فرمایید پارت به پارت، یادم رفت بگم فایلها معمولا pdf هستن.
شما میخواید بایت ذخیره کنید؛ به فرمت فایل وابسته نیست.
توضیح من در مورد VarChar بدلیل استفاده شما از این نوع بود.و توضیح هم دادم که توی فیلد میتونید String ذخیره کنید نه فایل!!

من این کدی که گفته بودید برای update نوشتم بازم کار نکرد:
کد رو اشتباه نوشتید، به نظرم اگه بیخیال Partial Insert بشید بهتره.

در ضمن نوع داده را به (VarBinary(MAX تغییر می دهم اصلا کلان خطا میگیره و پیغام خطا :
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query
نوع داده NvarChar رو نمیتونید همینطوری به VarBinary تبدیل کنید. اول باید یه فیلد جدید درست کنید بعد معادل Binary فیلد Nvarchar رو توی فیلد جدید بریزید و سپس فیلد قبلی رو حذف کنید.
برای این کار دستور زیر رو روی SQL Server اجرا کنید
Alter Table YourTable
Add NewColumn varbinary(MAX) -- null or not null ...

GO

Update YourTable
Set NewColumn = Cast(YourFieldName as varbinary(MAX))

GO

Alter Table YourTable
Drop Column YourFieldName

GO

exec sp_rename 'YourTable.NewColumn', 'YourFieldName'

GO

اگر از این طریق نمیشه، ممنون میشم از طریق FileStream خودتون توضیح بفرمایید. تو انجمن چیزی پیدا نکردم.
توی اینترنت جستجو کنید
http://www.dotnettips.info/post/331
بهتر اینه که مطلب زیر رو هم بخونید (هر چند در مورد SQL Server 2012 است)
http://www.dotnettips.info/post/1307

mashhadpix
شنبه 02 شهریور 1392, 15:54 عصر
سلام به همگی
راه حلش را خودم پیدا کردم این همه هم راه نمی خواهد برویم.
یک کد ساده است که در web.config پروژه نوشته می شود وقایلهای یه کم با حجم بالا مثلا 10 مگابایت را هم آپلود می کنیم بدون مشکل.

<httpRuntime executionTimeout="1200" maxRequestLength="400000" />
این همه هم مکافات نمی خاد بکشیم و یکی نبود این جوابو بهم بده.:چشمک: