سؤال

هذا فقط لن يعمل.المشكلة هي أنني لا أعرف ما يكفي حتى تعرف ما هو المفترض أن يحدث.أنا لا يمكن تصحيح هذا القانون.أود أن متجر upload إلى مجلد مؤقت "temp" ومن ثم نقلها إلى "تطبيقات".الرجاء المساعدة ؟ بريمج من الواضح أن الوصول إليها, ولكن أنا لا يمكن العثور على الملفات التي تم تحميلها...شكرا مقدما.

شكل (الذي يتم إنشاؤه باستخدام scriptlet - أنا وضعت هذا هنا إذا كان هذا يمكن أن يسبب مشاكل):

<%
out.write("<p>Upload a new game:</p>");
                    out.write("<form name=\"uploadForm\" action=\"game.jsp\" "
                    + "method=\"POST\" enctype=\"multipart/form-data\">"
                    + "<input type=\"file\" name=\"uploadSelect\" value=\"\" width=\"20\" />"
                    + "<br><input type=\"submit\" value=\"Submit\" name=\"uploadSubmitButton\" "
                    + "onclick = \"submitToServlet2('UploadGameServlet');\">"        
                    + "</form>");
 %>

الذي يدعو هذا سكريبت:

function submitToServlet2(newAction)
    {
       document.uploadForm.action = newAction;
    }

الذي بدوره يذهب إلى بريمج (رمز المدرجة في الكامل, منذ قد يكون هناك بعض العناصر الهامة إخفاء)

package org.project;

import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
// import servlet stuff
import org.apache.commons.fileupload.*;


public class UploadGameServlet extends HttpServlet {

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    if (ServletFileUpload.isMultipartContent(request))
    {
        try 
        {
            // Create a factory for disk-based file items
            FileItemFactory factory = new DiskFileItemFactory();

            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);

            // Parse the request
            List items = upload.parseRequest(request); /* FileItem */

            File repositoryPath = new File("\\temp");
            DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
            diskFileItemFactory.setRepository(repositoryPath);

            Iterator iter = items.iterator();
            while (iter.hasNext()) 
            {
                FileItem item = (FileItem) iter.next();
                File uploadedFile = new File("\\applets");
                item.write(uploadedFile);
            }            
        }
        catch (FileUploadException ex) 
        {
            Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (Exception ex) 
        {
            Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    PrintWriter out = response.getWriter();
    try {
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet UploadGameServlet</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet UploadGameServlet at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");
    } finally { 
        out.close();
    }
} 

}

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

المحلول

File repositoryPath = new File("\\temp");
File uploadedFile = new File("\\applets");

من خلال محاولة الوصول إلى هذه الملفات من دون أي نوع قيادة أو المسار المطلق ، تحاول الكتابة إلى الملفات (ليس الدلائل) اسمه temp و applets تحت دليل العمل الحالي.في التطبيق ملقم دليل العمل الحالي هو عادة bin المجلد (يعتمد على ما ملقم التطبيق الذي تستخدمه ، إلخ).

بعض الاقتراحات:

  1. استخدام مسار مطلق (ويفضل تخزينها في web.xml أو خصائص الملف) إلى الرجوع إلى الدليل الذي تريد حفظ الملفات.
  2. لديك لتحديد اسم الملف الذي تريد أن تكتب ، ربما كنت ترغب في خلق نوع من العشوائية/اسم فريد لكل طلب.
  3. تنقذ نفسك بعض المفاتيح واستخدام عضو متغير بدلا من كل Logger.getLogger(UploadGameServlet.class.getName()) المراجع!
  4. إضافة بعض التصحيح خاصة أن ترى أين أنت كتابة البيانات - تسجيل نتيجة repositoryPath.getAbsolutePath(), على سبيل المثال.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top