java अपाचे कॉमन्स FileUpload का उपयोग करना



jsp apache-commons-fileupload (1)

यह सिर्फ काम नहीं करेगा समस्या यह है कि मुझे यह भी पता नहीं है कि क्या होना चाहिए। मैं इस कोड को डीबग नहीं कर सकता। मैं अस्थायी फ़ोल्डर "अस्थायी" में अपलोड करना चाहता हूं और फिर उन्हें "एपलेट्स" में ले जाना चाहता हूं कृपया सहायता कीजिए? सर्वलेट को स्पष्ट रूप से उपयोग किया जा रहा है, लेकिन मुझे अपलोड की गई फाइल नहीं मिली ... अग्रिम धन्यवाद

फ़ॉर्म (जो कि एक पटकथा का उपयोग करके बनाया गया है - मैं इसे यहां रखता हूं अगर इससे समस्या हो सकती है):

<%
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() का परिणाम लॉग करें।