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

عمل فورمة بروفايل للمستخدم

بدأه imysterious1 في 28 مايو 2012 · 7 رد · 1,560 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله و بركاته

انا عندي صفحة servlet & JSP

وبحاول اعمل فورمة ابولد لصورة مع نص كتابي كالوصف مثلا

لكن المشكلة اني عندما احاول احضار المتغيرات في ال Servlet باستخدام request.getParameter

تظهرلي مشكلة و هي انها تكون ب Null

وبعد البحث وجدت اني عندما اضع Annotation

@MultiPartConfig

قيم المتغيرات تكون مقرؤة عادي جدا

لكن هنالك مشكلة جديدة ظهرت و هي انه في كود الابلود يدخل في لووب غير منتهي حتي مع زيادة المتغير كل مرة

وها هو الكود :

@MultipartConfig
public class upl extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            //-------------------------------------
//            Part imageLinkPart = request.getPart("imageLink");
//            Scanner scanner = new Scanner(imageLinkPart.getInputStream());
//            String imgLink = scanner.nextLine();
//            //-------------------------------------
//            MultipartParser mp=new MultipartParser(request, 1*1024*1024);
            String imageDescription = request.getParameter("imageDesc");
            String imageLink = request.getParameter("imageLink");

            //to get the content type information from JSP Request Header
            String contentType = request.getContentType();
            //here we are checking the content type is not equal to Null and as well as the passed data from mulitpart/form-data is greater than or equal to 0
            if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
                DataInputStream in = new DataInputStream(request.getInputStream());
                //we are taking the length of Content type data
                int formDataLength = request.getContentLength();
                byte dataBytes[] = new byte[formDataLength];
                int byteRead = 0;
                int totalBytesRead = 0;
//================================================================
  هذه هي اللووب غير المنتهية  
   //this loop converting the uploaded file into byte code
                while (totalBytesRead < formDataLength) {
                    byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
                    totalBytesRead += byteRead;
                }
                SQLOperations.connect();
                String file = new String(dataBytes);
                //for saving the file name
                String saveFile = file.substring(file.indexOf("filename=\"") + 10);
                saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
                saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1, saveFile.indexOf("\""));
                int lastIndex = contentType.lastIndexOf("=");
                String boundary = contentType.substring(lastIndex + 1, contentType.length());
                int pos;
                SQLOperations.insertImageName(saveFile, imageDescription, imageLink);
                //extracting the index of file 
                pos = file.indexOf("filename=\"");
                pos = file.indexOf("\n", pos) + 1;
                pos = file.indexOf("\n", pos) + 1;
                pos = file.indexOf("\n", pos) + 1;
                int boundaryLocation = file.indexOf(boundary, pos) - 4;
                int startPos = ((file.substring(0, pos)).getBytes()).length;
                int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;

                // creating a new file with the same name and writing the content in new file
                String fileLocation = "C:\\Users\\M\\Music\\Documents\\NetBeansProjects\\Templ\\web\\upl\\" + saveFile;
                FileOutputStream fileOut = new FileOutputStream(fileLocation);
                fileOut.write(dataBytes, startPos, (endPos - startPos));
                fileOut.flush();
                fileOut.close();
                SQLOperations.disconnect();
                response.sendRedirect("showImage.jsp");

            }
//             else{
//                String error ="nullImage";
//                response.sendRedirect("upload.jsp?error='"+error+"'&&imgDesc='"+imageDescription+"'");
//            }
        } finally {
            out.close();
        }
    }

[

[[/font

تم تعديل هذه المشاركة بواسطة imysterious1 في 28 مايو 2012 في 13:30

#2

مفيش حد يرد ؟؟؟؟؟ :( :( :( :dry:

#3

حرام يا جدعان بقي مفيش حد عارف ؟

#4

لرفع ملف ___ إنظر المواضيع المثبته

#5
                while (totalBytesRead < formDataLength) {
                    byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
                    totalBytesRead += byteRead;
                }

أخي هذا الكود خاطئ تماماً الدالة read تقرأ حرف واحد

فلماذا تضيف على البيانات المقروءة قيمتها

البايت المقروء قد تكون قيمته سالبة لذا غير معروف إلى متى ييبقى هذا التكرار يعمل

استبدل معدل الزيادة بإضافة 1 كل مرة

وقم بتخزين البايتات الخاصة بك في المصفوفة dataBytes وستعمل معك الامور بسلاسة بإذن الله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6
علاء الصالحي كتب:

                while (totalBytesRead < formDataLength) {
                    byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
                    totalBytesRead += byteRead;
                }

أخي هذا الكود خاطئ تماماً الدالة read تقرأ حرف واحد

فلماذا تضيف على البيانات المقروءة قيمتها

البايت المقروء قد تكون قيمته سالبة لذا غير معروف إلى متى ييبقى هذا التكرار يعمل

استبدل معدل الزيادة بإضافة 1 كل مرة

وقم بتخزين البايتات الخاصة بك في المصفوفة dataBytes وستعمل معك الامور بسلاسة بإذن الله

تحياتي

المشكلة ليست في تلك السبب الرئيسي كان بسبب اني احول اعمل ابلود مع text field

وعندما يحاول يقرا الكلام يقراه ب Null لانه يقراه من نوع MIME type اللي هوه مخصص للفايلز

وكان لا بد من

Annotatin @MultipartParser

اشكرك علي ردك اخي علاء : ^_^

#7

أتمنى هذا الموضوع يفيدك:

/index.php?showtopic=273386

بالتوفيق إن شاء الله

:cool:

#8
salahocp كتب:

أتمنى هذا الموضوع يفيدك:

/index.php?showtopic=273386

بالتوفيق إن شاء الله

:cool:

جزاك الله خيرا أخي الكريم :)

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

لذلك الافضل هوه وضع هذا المجلد بالكود في مجلد ووضع فقط اسم الصورة بالاتا بيز :)

الحمد لله تم حل المشكلة من فترة ^_^

والحل كان في كلاس تعمل علي حل مشكلة ال MIME Parsing :)

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…