كيف يمكنني تقديم صورة للمتصفح باستخدام Struts 2 + Hibernate 3؟

StackOverflow https://stackoverflow.com/questions/151100

  •  02-07-2019
  •  | 
  •  

سؤال

أقوم بتطوير تطبيق ويب باستخدام Struts 2.1.2 وHibernate 3.2.6.GA.عندي كيان User, ، والتي قمت بتعيينها على جدول USERS في قاعدة البيانات باستخدام السبات.أريد الحصول على صورة مرتبطة بهذا الكيان، والتي أخطط لتخزينها كملف BLOB في قاعدة البيانات.أريد أيضًا عرض الصورة على صفحة ويب مع سمات أخرى لـ User.

الحل الذي كنت أفكر فيه هو الحصول على طاولة IMAGES(ID, IMAGE) أين IMAGE هو BLOB عمود. USERS سوف يكون FK عمود يسمى IMAGEID, ، والذي يشير إلى IMAGES طاولة.سأقوم بعد ذلك بتعيين عقار على User كيان يسمى imageId المعينة لهذا IMAGEID باعتبارها طويلة.عند عرض الصفحة باستخدام ملف JSP، أود إضافة صور بتنسيق <img src="images.action?id=1"/> وما إلى ذلك، ويكون لديك إجراء يقرأ الصورة ويتدفق المحتوى إلى المتصفح، مع تعيين الرؤوس لتخزين الصورة مؤقتًا لفترة طويلة.

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

هل كانت مفيدة؟

المحلول

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

<a href="foo.jsp"><img src="imageservlet/123456789.png"></a>

حيث 123456789 هو المفتاح الأساسي لصورتك في قاعدة البيانات.سيبدو تعيين servlet الخاص بك كما يلي:

<servlet>
  <servlet-name>ImageServlet</servlet-name>
  <servlet-class>com.example.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>ImageServlet</servlet-name>
  <url-pattern>/imageservlet/*</url-pattern>
</servlet-mapping>

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

نصائح أخرى

لا يدعم Internet Explorer هذا النمط من تضمين الصور.

إذا كنت تريد عرض صورة المستخدم مباشرة مع خصائصه، فربما يمكنك التفكير في تضمين بيانات الصورة مباشرة في HTML.

باستخدام بيانات خاصة:نظام URL الذي يمكنك من تضمين أي بيانات mime داخل صفحة HTML، ويكون التنسيق كما يلي:

data:<mimetype>;base64,<data>

يحتاج إلى استبداله بنوع mime لبياناتك (صورة/png على سبيل المثال) و هي السلسلة المشفرة base64 للبايتات الفعلية للملف.

يرى آر إف سي 2557.

مثال:

<img src="data:image/png;base64,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">

الحل المقترح الخاص بك سوف يعمل بشكل مثالي.وقد فعلت الشيء نفسه.

لكنك لا تحتاج إلى servlet لهذا الغرض.لدى Struts2 بالفعل نتيجة دفق.

انظر الى هذا الدعامات 2 مثال الذي يصف بالضبط ما تريد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top