PDA

View Full Version : حرفه ای: اپلود فایل با سرعت بالا



sananet
شنبه 31 تیر 1402, 22:58 عصر
با سلام
سایتی داریم که نیاز به آپلود تصویر داره ، با اینکه سرعت هاست رو. خیلی بردیم بالا باز هم در آپلود تصاویر با حجم بالا مشکل داره و خیلی طول میشکه تا آپلود انجام بشه !!!
می خواستم بدونم قطعه کدی به غیر از کد زیر برای آپلود داریم که بتونیم باهاش در php سرعت آپلود تصویر رو ببریم بالا
لازم به ذکر است که برای تصاویر با حجم بالا کدی نوشتم که سایز تصویر رو کم کنه و بعد اپلود بشه که اون هم خودش خیلی طول میشکه و سرعت کار رو پایین میاره

من از این کد استفاده می کنم

$mupload=move_uploaded_file($_FILES['filImage']['tmp_name'], "image/product/$new_filename");

sananet
یک شنبه 01 مرداد 1402, 19:04 عصر
هیچ گسی پیشنهادی نوآره!!!

morrning
یک شنبه 01 مرداد 1402, 21:47 عصر
سلام
بیس کار همینه.
شما میتوید با کتابخونه های سمت کلاینت حجم تصویرو کم کنید و سپس آپلود کنید.
در مورد سرعت هاست یه چند تا نکته بهتون بگم
اولا سرعتشو بردید بالا یه چیز غیر کارشناسیه ئهنای باندتون منظورتون هست یا سرعت پردازنذه و ....
دوما یه نکته ای رو در نظر بگیرید و اونم اینکه ببینید پهنای باندتون برای آپلود چطوره چون معمولا نسبت دانلود و آپلود رو نا متقارن تنظیم میکنن.

morrning
یک شنبه 01 مرداد 1402, 21:55 عصر
/**
* Function scaling an image from a file input to specified dimensions
* If the specified dimensions are not proportional to image dimensions the output image will be cropped at center
*
* @param file {File} Input file of a form
* @param dimensions {{width: number, height: number}} Dimenstions of the output image
* @returns {Promise<Blob | null>} Promise resolving to a scale image or a null if provided an invalid file type
*/
export async function scaleImageBeforeUpload(file: File, dimensions: {width: number, height: number}): Promise<Blob | null> {
// ensure the file is an image
if (!file.type.match(/image.*/)) return null;


const image = new Image();
image.src = URL.createObjectURL(file);


await new Promise<Event>((res) => image.onload = res);
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d", {alpha: true});


canvas.width = dimensions.width;
canvas.height = dimensions.height;


if (image.height <= image.width) {
const scaleProportions = canvas.height / image.height;
const scaledWidth = scaleProportions * image.width;
context.drawImage(image, (canvas.width - scaledWidth)/2, 0, scaledWidth, canvas.height);
}
else {
const scaleProportions = canvas.width / image.width;
const scaledHeight = scaleProportions * image.height;
context.drawImage(image, 0, (canvas.height - scaledHeight)/2, canvas.width, scaledHeight);
}


return new Promise((res) => canvas.toBlob(res));
}


این تابع یه فایلو میگیره و اونو تغییر ساز و ریسنتر میکنه. البته جاوا اسکریپت هست و باید سمت کلاینت استفاده بشه.
پیشنهاد میکنم اونو خارج از تگ فرم استفاده کنید چون دو بار فرم ارسال میشه مگر تینکه قبلش از preventDefault استفاده کنید و نزارید فرم سابمیت بشه

sananet
دوشنبه 02 مرداد 1402, 11:12 صبح
پهنای باندتون برای آپلود چطوره چون معمولا نسبت دانلود و آپلود رو نا متقارن تنظیم میکنن. پاسخ پاسخ با نقل قول

اینو از php.ini نگاه کنم
در مورد ریسایز یه کد نوشته‌ام اما اون خودش هم کای زمان میگیره و آپلود رو زمان‌بر میکنه

morrning
جمعه 13 مرداد 1402, 21:05 عصر
شما نمونه کدی که نوشتی رو قرار بده تا بتونیم بهتر کمک کنیم

morrning
جمعه 13 مرداد 1402, 21:06 عصر
اینو از php.ini نگاه کنم
در مورد ریسایز یه کد نوشته‌ام اما اون خودش هم کای زمان میگیره و آپلود رو زمان‌بر میکنه

نه از هاستینگ باید بپرسید.