اذهب إلى المحتوى
  • 0

رفع ملف pdf وتحميل ملف pdf

ايمن ميلاد

السؤال

Recommended Posts

  • 0

 باستخدام لارافيل:
يمكنك تخزين الملف عندك في Storage وتحفظ المسار فقط في الداتابيز وعندما تريد عرض او تحميله فقط ستذهب لكل ملف الي المسار خاص به 

1. إنشاء موديل PdfFile وأضف حقلين، أحدهما لاسم الملف والآخر للمسار path:

$table->string('name');
$table->string('path'); 

2. في ميثود التحميل ضع الملف في مجلد uploads بداخل storage:

$file = $request->file('file');
$fileName = $file->getClientOriginalName();
$path = $file->store('uploads','public');

عندما نستخدم store مع إعطاء اسم المجلد كـ'uploads'، فإن لارافيل سيقوم تلقائيا بإنشاء هذا المجلد داخل storage/app/public إن لم يكن موجوداً مسبقاً.

ثم يقوم بتخزين الملف داخل هذا المجلد. بحيث يكون المسار النهائي للملف هو:

storage/app/public/uploads/file-name.pdf

3. احفظ المسار فقط في حقل path بدلاً من الملف: 

$this->path = $path;
$this->name = $fileName;
$this->save();

4. عند العرض أو التحميل، اذهب مباشرة إلى المسار:

<a href="{{ asset('storage/' . $pdf->path) }}">
  تحميل
</a>

بهذه الطريقة سيتم تخزين الملفات فعلياً في storage والاحتفاظ بالمسار فقط في الداتابيز.

https://wiki.hsoub.com/Laravel/filesystem

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لا يتم رفع الملفات بشكل مباشر الى قواعد البيانات عادة، بل يتم رفعها الى نظم الملفات ويتم حفظ مسارات اليها في قاعدة البيانات ليتم عرضها عند الاستعلام. وطريقة خالد في الإجابة السابقة تقتضي ذلك. 

هنالك طريقة أخرى، قد يمكن اعتبارها حلا مؤقتا نسبيا. وهي عن طريق تحويل هاته الملفات الى سلاسل نصية مكودة بـ base64، ولاحقا يتم الغاء تشفيرها بها لتعود على هيئتها. 

// قراءة ملف البي دي اف او التقاطه من الطلبية
$pdfContent = file_get_contents($pdfFilePath);

// تحويله
$base64String = base64_encode($pdfContent);

// حقنه في قواعد البيانات
$sql = "INSERT INTO files (encoded_string) VALUES ('$base64String')";

يرجى الاشارة أيضا الى أن الحقل encoded_string يجب أن يستوعب أعداد محارف كبيرة، لأن السلسلة الناتجة ستكون كبيرة جدا.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

وعليكم السلام،

لرفع ملف PDF إلى قاعدة بيانات وعرضه في جدول مع خيار التنزيل، يمكنك اتباع الخطوات التالية:
 

تحضير قاعدة البيانات:

قم بإنشاء جدول في قاعدة البيانات تحتوي على عمود لتخزين الملفات. يمكن استخدام النوع BLOB أو أي نوع آخر مناسب لتخزين الملفات الثنائية.

يمكنك استخدام ميجريشن لارافيل لإنشاء هذا الجدول.

إنشاء  (Model):

إنشاء نموذج للتعامل مع بيانات الجدول.

كتابة واجهة لرفع الملفات:

استخدم لغة القوالب Blade لإنشاء نموذج HTML لرفع الملفات.

تأكد من تحديد enctype="multipart/form-data" في الفورم للسماح برفع الملفات.

معالجة طلب الرفع في الكنترولر (Controller):

في الكنترولر، اكتب الكود اللازم لمعالجة طلب الرفع وحفظ الملف في قاعدة البيانات.

يمكنك استخدام طريقة $request->file('pdfFile') للحصول على الملف المرفوع.

عرض الجدول مع خيارات التنزيل:

استخدم Blade لإنشاء جدول يعرض الملفات المرفوعة.

كل صف في الجدول يجب أن يحتوي على رابط لتنزيل الملف.

معالجة طلب التنزيل في الكنترولر:

اكتب كود في الكنترولر لمعالجة طلب التنزيل.

يجب أن يقوم الكود بقراءة الملف من قاعدة البيانات وإرساله كاستجابة مع تعيين رؤوس الاستجابة بشكل مناسب للتنزيل.

مثال على الكود:

(Controller):
 

use App\Models\PdfFile; // تأكد من استيراد النموذج الخاص بك
use Illuminate\Http\Request;

public function upload(Request $request)
{
    $file = $request->file('pdfFile');
    $blob = file_get_contents($file->getRealPath());

    $pdfFile = new PdfFile();
    $pdfFile->file_data = $blob;
    $pdfFile->save();

    return back();
}

public function download($id)
{
    $pdfFile = PdfFile::findOrFail($id);

    return response($pdfFile->file_data)
        ->header('Content-Type', 'application/pdf')
        ->header('Content-Disposition', 'attachment; filename="download.pdf"');
}

الفورم في Blade:
 

<form action="{{ route('pdf.upload') }}" method="post" enctype="multipart/form-data">
    @csrf
    <input type="file" name="pdfFile">
    <button type="submit">Upload</button>
</form>

عرض الجدول في Blade:

@foreach(PdfFile::all() as $file)
    <tr>
        <td>{{ $file->name }}</td>
        <td><a href="{{ route('pdf.download', $file->id) }}">Download</a></td>
    </tr>
@endforeach

تأكد من تعديل الكود ليتناسب مع بنية تطبيقك وقاعدة بياناتك. كما يجب الانتباه لأمان البيانات والتحقق من الملفات قبل رفعها.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 19‏/12‏/2023 at 09:29 قال ايمن ميلاد:

بارك الله فيكم علي الرد اخواني الكرام 

لكن انا اعمل بي mysqli  وليس لارافيل

اطلع على الإجابة السابقة، فهي تقتضي استعمال PHP مباشرة

بتاريخ On 18‏/12‏/2023 at 22:25 قال Adnane Kadri:

لا يتم رفع الملفات بشكل مباشر الى قواعد البيانات عادة، بل يتم رفعها الى نظم الملفات ويتم حفظ مسارات اليها في قاعدة البيانات ليتم عرضها عند الاستعلام. وطريقة خالد في الإجابة السابقة تقتضي ذلك. 

هنالك طريقة أخرى، قد يمكن اعتبارها حلا مؤقتا نسبيا. وهي عن طريق تحويل هاته الملفات الى سلاسل نصية مكودة بـ base64، ولاحقا يتم الغاء تشفيرها بها لتعود على هيئتها. 

// قراءة ملف البي دي اف او التقاطه من الطلبية
$pdfContent = file_get_contents($pdfFilePath);

// تحويله
$base64String = base64_encode($pdfContent);

// حقنه في قواعد البيانات
$sql = "INSERT INTO files (encoded_string) VALUES ('$base64String')";

يرجى الاشارة أيضا الى أن الحقل encoded_string يجب أن يستوعب أعداد محارف كبيرة، لأن السلسلة الناتجة ستكون كبيرة جدا.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Adnane Kadri:

اطلع على الإجابة السابقة، فهي تقتضي استعمال PHP مباشرة

انا اريد طريقة تحميل ملف pdf  هدا يكون مخزن في قاعدة بيانات  بحيث عندما اضغط تحميل ينزل ملف مثلا عندما احمل ملف pdf  من موقع مكتبة كتب من نت هل فهمت علي اخي انا اساسا لا اتعمل معا اطار عمل لارافل ياريت ترفق لي حتا رابط يشرح طريقة 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...