2016-07-19 5 views
-1

Ich habe Probleme beim Verarbeiten des Bildes, das ich auf den Server hochlade. Wenn ich mich online umsehe, scheint es mir, dass ich zuerst ein DiskFileItemFactory Objekt aus der Apache-Bibliothek erstellen muss, dann erstelle ich ein ServletFileUpload Objekt. Von dort laufe ich alle Formularelemente durch, bis ich auf die Datei klicke. Allerdings, wenn ich formItems.iterator() tun die Compilers klagtBild auf Servlet hochladen und dann an Amazon s3 weiterleiten

- Iterator is a raw type. References to generic type Iterator<E> should be 
    parameterized 
    - The method iterator() is undefined for the type List 

Wie würde ich mich über diesen Fehler Festsetzung und könnte jemand mir helfen, lernen, was ich falsch mache? Ich bin neu in Java Servlets, aber ich bin mit Java vertraut. Hier ist mein Code unten. Vielen Dank!

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     //doGet(request, response); 

     PrintWriter out = response.getWriter(); 

     AWSCredentials credentials = new BasicAWSCredentials("XXXX", "XXXX"); 

     AmazonS3 s3Client = new AmazonS3Client(credentials); 

     try { 

     out.println("Hello, THIS WORKED!!<br/>"); 

      boolean isMultipart = ServletFileUpload.isMultipartContent(request); 


      if (isMultipart) { 
        out.println("Multipart is true"); 

         response.setHeader("Access-Control-Allow-Origin", "*"); 
         response.setHeader("Access-Control-Allow-Methods", "POST"); 
         response.setHeader("Access-Control-Allow-Headers", "Content-Type"); 
         response.setHeader("Access-Control-Max-Age", "86400"); 

         DiskFileItemFactory factory = new DiskFileItemFactory(); 
         factory.setSizeThreshold(THRESHOLD_SIZE); 

         ServletFileUpload upload = new ServletFileUpload(factory); 
         upload.setFileSizeMax(MAX_FILE_SIZE); 
         upload.setSizeMax(MAX_REQUEST_SIZE); 


         List formItems = (List) upload.parseRequest(request); 

/////COMPILER ERROR. It complains that the Iterator is a raw type. How Do I learn how to fix this? 
         Iterator iter = formItems.iterator(); 



         // iterates over form's fields to get UUID Value 
         while (iter.hasNext()) { 
          FileItem item = (FileItem) iter.next(); 
          ObjectMetadata om = new ObjectMetadata(); 
          om.setContentLength(item.getSize()); 

          try { 



          } catch (AmazonServiceException ase) { 
           out.println(ase.toString()); 

          } catch (AmazonClientException ace) { 


           out.println(ace.toString()); 
          } 


          s3Client.putObject("images", "TestImg.jpg", item.getInputStream(), om); 
          if (item.isFormField()) { 

          out.println(item.getString()); 

          } 
          // processes only fields that are not form fields 
          if (!item.isFormField()) { 
           // itemFile = item; 
          } 
         } 


//      
//     } 
//     

      } 


     } catch(Exception e) { 



      out.print(e.toString()); 

     } 



    } 

Antwort

0

Ich denke, Sie müssen einen Schritt zurück und versuchen, Schritt für Schritt anzugehen. Vergessen Sie das ganze AWS-Zeug für den Moment, denn Sie kommen nicht einmal an den Punkt in Ihrem Code, an dem Sie mit AWS interagieren. Sie müssen den Dateiupload erst in Betrieb nehmen, bevor Sie sich darum kümmern müssen, die Datei in S3 zu kopieren. Um das zu tun, müssen Sie herausfinden, was der Compiler Ihnen sagt.

Schauen wir uns diese beiden Zeilen:

List formItems = (List) upload.parseRequest(request); 
Iterator iter = formItems.iterator(); 

ein paar Zeilen auf der Suche sehen wir, dass upload eine Instanz von ServletFileUpload ist. Also gehen wir zu the documentation für ServletFileUpload.parseRequest(). Die Dokumentation zeigt diese Methode Unterschrift:

public List<FileItem> parseRequest(HttpServletRequest request) 
          throws FileUploadException 

Beachten Sie, wie es nur ein List Objekt nicht zurück, es gibt tatsächlich ein List<FileItem> Objekt. Als du es auf (List) geworfen hast, hast du diese Information weggeworfen. Also lassen Sie uns den Code ändern FileItem zu verwenden, und während wir gerade dabei sind, warum nicht einen Java For-Each loop anstelle einer alten Schule Iterator wie verwenden so:

List<FileItem> formItems = upload.parseRequest(request); 
for (FileItem item : formItems) { 
    ObjectMetadata om = new ObjectMetadata(); 
    om.setContentLength(item.getSize());