الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة فى حفظ صورة فى قاعدة بيانات

مغلق
بدأه Java2World في 18 مارس 2006 · 8 رد · 2,044 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أعمل على موقع يتم من خلاله تخزين بيانات الموظفين مع الصورة الشخصية لهم و لكن المشكلة ان الكود الذى قمت بكتابته يعمل على السيرفر المحلى لكن عند نقله الى الهوست لا يعمل و يعطينى رسالة خطأ

 java.io.FileNotFoundException: C:\Documents and Settings\ِAly Naser\Desktop\186209.jpg (No such file or directory)

مع العلم ان الملف موجود فى نفس المسار المحدد

و هذا هو الكود:-

File file = new File(request.getParameter("Imagen"));

	FileInputStream fis = new FileInputStream(file);




	Pstatement = connection.prepareStatement("INSERT INTO viajes (Agencia,Tipo,Titulo,OContenente,OPais,OCiudad,DContenente,DPais,DCiudad,PSalida,USalida,Imagen) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)");
 	 
  .......
.....
....
...
..
..
  Pstatement.setBinaryStream(12,fis,(int)file.length());
  
	Pstatement.executeUpdate();

مع العلم ان قاعدة البيانات هى MySQL 5.0 و السيرفر هو Tomcat 4.0.3

Java2World

#2

وهل هذا الامتداد في الخادم؟

C:\Documents and Settings\ِAly Naser\Desktop\186209.jpg

#3
حسام الملحم أبومازن كتب:
وهل هذا الامتداد في الخادم؟

C:\Documents and Settings\ِAly Naser\Desktop\186209.jpg

الحل هو تحويل الصوره الى Stream وثم ارسلها للسيرفر وتخزينها بقاعدة البيانات،،،

هذا الكود لتخزين صوره من الجهاز إلى قاعدة بيانات Oracle

import oracle.jdbc.driver.*;
import oracle.sql.*;
import java.sql.*;
import java.io.*;

class WriteBlob {
	static Connection conn;
	public static void main(String[] args) {
  String filename = "C:\\Documents and Settings\\Admin\\My Documents\\KFUPM\\ICS334\\Project\\Project\\Phase2\\insertingBlob\\images.jpg";
  try {
  	Class.forName("oracle.jdbc.driver.OracleDriver");
  	conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL2","scott","tiger");
  	conn.setAutoCommit(false);
  	Statement st = conn.createStatement();
  	int b = st.executeUpdate("UPDATE demo SET image = empty_blob() WHERE id = 1");
  	System.out.println("Int Value:\t" + b);
  	
  	ResultSet rs = st.executeQuery("SELECT * FROM demo FOR UPDATE");
  	rs.next();
  	BLOB blob = ((oracle.jdbc.driver.OracleResultSet)rs).getBLOB("image");
  	FileInputStream instream = new FileInputStream(filename);
  	OutputStream outstream = blob.getBinaryOutputStream();
  	int chunk = blob.getChunkSize();
  	System.out.println(chunk);
  	byte[] buff = new byte[chunk];
  	int le;
  	System.out.println("Writing file " + filename + " into blob.....");
  	while((le = instream.read(buff)) != -1) {
    outstream.write(buff,0,le);
  	}
  	System.out.println("Blob Written.....");
  	instream.close();
  	outstream.close();
  	conn.commit();
  	conn.close();
  	conn = null;
  	System.out.println("Database updated.....");
  }
  catch(Exception e) {
  	System.out.println("exception" + e.getMessage());
  	e.printStackTrace();
  }
	}
}

تم تعديل هذه المشاركة بواسطة صلاح الثبيتي في 19 مارس 2006 في 00:33

#4

السلام عليكم

شكرا أخ حسام و أخ صلاح

شكرا على الأستجابة السريعة لكن المشكلة بقيت حتى عندما جربت كود الأخ صلاح بعد تحويله لـ Bean لكنى اعتقد ان المشكلة سببها ان الملف المراد تخزينه فى قاعدة البيانات موجود اصلا على جهاز الزبون و ليس على السيرفر.

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

شكرا على المساعدة.

Java2World

#5

المشكلة تكمن في اخذ البيانات من جهاز العميل اليس كذلك... يعني انت تستعمل فورم html و فيه زر استعراض يحدد من خلاله المستخدم الملف الصورة.. اليس كذلك

و على فكرة يوجد قسم خاص لـ JSP سوف انقل هذا الموضوع لهناك .. لاخذ العلم ( لكي لا تعتقد بان الموضوع قد حذف او ضاع)

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#6

شكرا أخ رامى و أسف لو مكنتش اخد بالى لقسم JSP

بالظبط أخ رامى سيتم تحديد الملف من نموذج هتمل , وخلية التى ستحمل بأسم الملف هى TextBox لكن من نوع File

Java2World

#7

أستطعت اكتشاف المشكلة.

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

مشكلتى حلتى بأنى استخدمت المكتبة Commons FileUpload package و عنوانها http://jakarta.apache.org/commons/fileupload/ فى تحميل الملف أولا الى السيرفر و من ثم تخزينه على الويب و تخزين اسم الملف فقط فى قاعدة البيانات.

شكرا لكل من حاول المساعدة

Java2World

#8

فعلا!! لانه انا استغربت من اصرارك على تخزين الصورة داخل قاعدة البيانات ؟؟

سوف انقل الموضوع لقسمه الصحيح...

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#9

hello man

u have to put the path according to web server

http://IP:port/what ervere/whaterver/image name

or

../.././image name

هذا الموضوع مغلق.

مواضيع مشابهة