برنامج تحميل ملفات جافا بسيط بدون تبعيات

نشرت: 2023-01-06

أحد المتطلبات الأساسية لتطبيقات الويب والمواقع المعاصرة هو القدرة على تحميل الملفات ، مثل المستندات والصور ومقاطع الفيديو. على سبيل المثال ، يمكن للمستخدمين نشر مقاطع الفيديو والصور على منصات الشبكات الاجتماعية مثل Instagram.

كان تنفيذ إجراء تحميل الملف وإدارته مهمة صعبة في السابق. لحسن الحظ ، أصبحت عمليات تحميل الملفات أبسط نتيجة للتقدم في التكنولوجيا عبر الإنترنت. على سبيل المثال ، يجعل برنامج تحميل ملفات جافا تحميل الملفات سريعًا ومريحًا.

ومع ذلك ، من خلال عمليات تحميل الملفات ، قد يقوم مجرمو الإنترنت بإدخال برامج ضارة أو غيرها من المحتويات الضارة إلى جهازك وإتلاف الخادم. لذلك يجب على المطورين التأكد تمامًا من أن تحميل الملف على موقع الويب أو تطبيق الويب الخاص بهم آمن. لإنشاء تحميل آمن للملفات ، نوصيك باستخدام SDK موثوق لتحميل ملف Java.

سننتقل إلى كيفية استخدام Java لإنشاء أداة تحميل ملفات في هذه المقالة.

كيف يتم تنفيذ برنامج رفع الملفات باستخدام Java؟

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

يمكننا إنشاء برنامج تحميل ملف بسيط نستخدم فيه فقط نموذج HTML و servlet. في مثالنا ، سيحتوي نموذج HTML على حقلي إدخال. يسمح حقل الإدخال الأول للمستخدم بتحميل ملفه ويسمح حقل الإدخال الثاني للمطور بإخبارنا بالمكان الذي يجب علينا تخزين الملف فيه.

نحن نقاضي طريقة POST لإرسال بيانات النموذج بما في ذلك الملف إلى الخادم. أيضًا ، عندما نقوم بتحميل الملفات ، فإننا نستخدم encrypt = ”multipart / form-data” لأن الملفات تحتوي على الكثير من الأحرف غير القابلة للطباعة.

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

إنشاء ملف HTML مع حقل الإدخال

قبل أن نبدأ ، أنشئ ملف index.html للمتابعة.

يجب أن يحتوي ملف index.html على الكود التالي:

<! DOCTYPE html>
<html lang = ”en”>
<head>
<title> برنامج تحميل ملفات Java </title>
<meta http-equiv = ”Content-Type” content = ”text / html؛ charset = UTF-8 ″>
</head>
<الجسم>
<form method = ”POST” action = ”upload” enctype = ”multipart / form-data”>
ملف:
<input type = ”file” name = ”java-file” id = ”java-file” /> <br/>
المكان المقصود:
<نوع الإدخال = ”text” value = ”/ java-folder” name = ”destination” />
</br>
<input type = ”submit” value = ”Submit” name = ”submit” id = ”submit” />
</form>
</body>
</html>

هذا ما يجب أن تكون عليه صفحتك:

التعامل مع معالجة جانب الخادم للملف

لكتابة رمز servlet ، سننشئ ملفًا يسمى FileUploadServlet.java. تستخدم Serlets التعليقات التوضيحية لتحديد المكونات والبيانات الوصفية. لذلك يتم استخدام التعليق التوضيحيWebServlet لتعريف مكون servlet في Java.

يجب أن يذكر التعليق التوضيحي لـ Servlet أي HttpServlet يجب تنفيذه لأي عنوان URL. لذلك ، نحن نحدد الاسم ومعلمات ulrPattern في التعليق التوضيحيWebServlet. لاحظ أنه عند إرسال النموذج الخاص بنا ، سنقوم بإعادة التوجيه إلى عنوان url / upload حيث سيتم تنفيذ FileUploadServlet Class.

يقوم التعليق التوضيحيMultipartConfig بإبلاغ servlet أنه من السهل تلقي بيانات متعددة الأجزاء / النموذج في نوع MIME.

دعنا نكتب رمزنا الكامل الآن.

WebServlet (name = “FileUploadServlet” ، urlPatterns = { “/ upload” })
تضمين التغريدة
يقوم FileUploadServlet للفئة العامة بتوسيع HttpServlet {

المسجل النهائي الخاص المسجل LOGGER =
Logger.getLogger (FileUploadServlet.class.getCanonicalName ()) ،

عملية باطلة محمية محمية (طلب HttpServletRequest ،
استجابة HttpServletResponse)
يطرح ServletException و IOException {
response.setContentType ( “text / html ؛ charset = UTF-8” ) ؛

نهائي String dest = request.getParameter ( "وجهة" ) ؛
الجزء الأخير = request.getPart ( “ملف” ) ؛
اسم السلسلة النهائيOfFile = getFileName (جزء) ؛

OutputStream out = فارغة ؛
InputStream cont = null ؛
Final PrintWriter printWriter = response.getWriter () ؛

حاول {
out = new FileOutputStream ( ملف جديد (dest + File.separator
+ nameOfFile)) ؛
تابع = part.getInputStream () ،

القارئ int = 0 ؛
البايت النهائي [] بايت = بايت جديد [ 1024 ] ؛

بينما ((القارئ = تابع (بايت))! = -1 ) {
out.write (بايت ، 0 ، قارئ) ؛
}
printWriter.println ( "ملف" + nameOfFile + "تم إنشاؤه في" + dest) ؛
LOGGER.log (Level.INFO ، "ملف {0} تم تحميله إلى {1}" ،
كائن جديد [] {nameOfFile، dest})؛
} catch (FileNotFoundException fne) {
printWriter.println ( "لم تذكر اسم ملف أو"
+ "محاولة تحميل ملف إلى ملف غير موجود"
+ "الموقع". ) ؛
printWriter.println ( “<br/> خطأ:“ + fne.getMessage ()) ؛

LOGGER.log (Level.SEVERE، "خطأ أثناء تحميل الملف. خطأ: {0}" ،
كائن جديد [] {fne.getMessage ()}) ؛
} أخيرًا {
إذا (خارج! = خالية ) {
out.close () ؛
}
إذا (تابع = فارغ ) {
تابع إغلاق () ؛
}
إذا (printWriter! = فارغة ) {
printWriter.close () ،
}
}
}

سلسلة خاصة getFileName (الجزء الأخير الجزء) {
السلسلة النهائية partHeader = part.getHeader ( "ترتيب المحتوى" ) ؛
LOGGER.log (Level.INFO، “Part Header = {0}” ، partHeader)؛
لـ (String content: part.getHeader ( “content -حول” ) .split ( “؛” )) {
if (content.trim (). beginWith ( “filename” )) {
إرجاع المحتوى.
content.indexOf ( '=' ) + 1 ) .trim (). استبدل ( "\" " ، " " ) ؛
}
}
عودة فارغة ؛
}
}

يستدعي الأسلوب processRequest طريقة getFileName للحصول على اسم الملف من جزء الملف بعد استرداد الوجهة وجزء الملف من الطلب. بعد ذلك ، تقوم الطريقة بإنشاء FileOutputStream وتنقل الملف إلى الموقع المطلوب. يكتشف جزء معالجة الأخطاء في الطريقة عددًا قليلاً من الأسباب الأكثر شيوعًا لأخطاء عدم العثور على الملف ويعالجها.

انشر الكود

الآن علينا بناء وتشغيل برنامجنا. لذلك ، يمكنك استخدام أي من IDE المفضل لديك مثل NetBeans و Eclipse و Intellij Idea وما إلى ذلك. بمجرد القيام بذلك ، انتقل جزئيًا إلى

https://cdn.pixabay.com/photo/2016/11/30/20/58/programming-1873854__340.png

إذا كنت تستخدم NetBeans ، فافتح Netbeans IDE وانتقل إلى دليل العمل. راجع وثائق Java الرسمية إذا واجهتك مشكلة. انقر بزر الماوس الأيمن فوق المجلد الخاص بك في علامة التبويب "المشاريع" واختر "نشر". بعد ذلك ، يمكننا الوصول إلى المتصفح وكتابة عنوان URL أدناه:

http: // localhost: 8080 / {foldername} /

سيتم فتح صفحة HTML التي تم إنشاؤها أعلاه بعد إدخال عنوان URL والضغط على مفتاح الإدخال. لتحميل ملف إلى الموقع المطلوب ، يمكننا البحث في النظام واختيار الملف. نكتب المسار إلى المجلد الذي نريد تخزين الملف فيه في منطقة الوجهة. يجب أن يكون الدليل قابلاً للكتابة وأن يكون موجودًا بالفعل في النظام. عندما نضغط على زر التحميل مع حقل الوجهة فارغًا ، يظهر استثناء.

يتلقى servlet طلب POST عندما نضغط على زر التحميل ، ويقوم بنسخ الملف المحدد إلى المجلد المحدد.

يمكننا زيارة المجلد المخصص والتحقق لمعرفة ما إذا كان الملف الذي تم تحميله (على سبيل المثال TextFile.txt) موجودًا بعد النقر على زر التحميل.

حتى الآن ، قمنا ببناء أداة تحميل ملفات جافا بسيطة باستخدام HTML و Java. ومع ذلك ، نظرًا لأن "البسيط" يصبح رافعًا معقدًا مع العديد من الميزات ، فقد يكون من الصعب تتبع الميزات المهمة من الميزات غير الموجودة. ناهيك عن وجود العديد من المشكلات الأمنية عندما نفكر في إنشاء برنامج رفع من البداية. لذلك ، سينقلك القسم التالي إلى كيفية تحميل الملفات باستخدام Filestack SDK الآمن.

كيفية تحميل الملفات بسهولة باستخدام Filestack SDK

للمتابعة ، ستحتاج إلى مفتاح Filestack API .

للبدء ، قم بتثبيت Filestack SDK باستخدام الأمر أدناه:

تنفيذ 'com.filestack: filestack-java: 0.9.0'

لتنفيذ ميزات التحميل باستخدام Filestack ، استخدم الكود التالي في ملف Java الخاص بك:

// إنشاء العميل
تكوين التكوين = تكوين جديد ( “API_KEY” ) ؛
عميل العميل = عميل جديد (تكوين) ؛

// تعيين الخيارات والبيانات الوصفية المتعلقة بالتحميل
خيار StorageOptions = new StorageOptions.Builder ()
.mimeType ( "نص / عادي" )
.filename ( “file.txt” )
.يبني()؛

// إجراء تحميل متزامن
FileLink files = client.upload ( “/ filepath” ، false

// إجراء تحميل غير متزامن
متدفق <التقدم <FileLink>> تحميل = client.uploadAsync ( “filepath” ، false
upload.doOnNext ( مستهلك جديد <التقدم <FileLink>> () {
@تجاوز
قبول باطل عام (تقدم <FileLink>) يطرح استثناء {
System.out.printf ( "٪ f ٪٪ تم تحميل ملفك \ n" ، progress.getPercent ()) ؛
إذا (progress.getData ()! = خالية ) {
ملفات FileLink = progress.getData () ،
}
}
}) ؛

للتأكد من أنها تعمل ، يمكن إجراء الاختبارات التالية:

./ اختبار الملفات

إذا كنت تبحث عن نشر تطبيقك ، فإن Bintray هي هدف عمليات النشر. للنشر ، تحتاج إلى حساب مستخدم تم تسجيله في مؤسسة Filestack. لاحظ أيضًا الإرشادات الأساسية لإصدار Filestack. هناك حاجة إلى متغيرات البيئة "BINTRAY USER" و "BINTRAY API KEY". يهرب:

تصدير BINTRAY_USER = "
تصدير BINTRAY_API_KEY = "
./files bintrayUpload

استنتاج

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

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

الأسئلة المتداولة (FAQs)

هل يمكنك نقل الملفات باستخدام API؟

نعم. يمكن نقل الملفات باستخدام واجهة برمجة التطبيقات باستخدام الأدوات المتاحة في السوق القائمة على واجهة برمجة التطبيقات. يمكن دمج هذا مع البرامج التي تعمل على منصات مختلفة مثل البرامج عبر الإنترنت أيضًا.

هل يمكنني إرسال ملف كبير إلى REST API؟

قد يكون من الصعب تحميل الملفات الكبيرة ، خاصة عند وجود عوامل أخرى مثل ضعف النطاق الترددي واتصالات الشبكة. يمكن أن يؤدي إلى العديد من حالات فشل التحميل.

كيف تقرأ Java الملف الذي تم تحميله؟

باستخدام تدفقات الإدخال ، يقرأ برنامج Java مجموعات البايت أو الأحرف. قراءة الملف هي عملية متسلسلة تبدأ بتكوين كائن الملف ، وتمريره إلى ملف الإدخال ، وقراءة البيانات من الدفق ، ومعالجتها ، ثم إغلاق كائن الدفق والملف.

ما هي أداة تحميل الملف؟

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