2016-07-19 29 views
-1

サーバーにアップロードしたイメージの処理に問題があります。オンラインで見ると、最初にapacheライブラリからDiskFileItemFactoryオブジェクトを作成してから、ServletFileUploadオブジェクトを作成する必要があります。そこから、ファイルにヒットするまで、すべてのフォーム項目をループします。私はformItems.iterator() complilerがイメージをサーブレットにアップロードしてAmazon S3に転送

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

を文句行うときしかし、どのように私はこのエラーを修正については行くだろう、と誰かが私が間違ってやって学ぶのを助けることができますか?私はJava Servletを初めて使い慣れていますが、Javaに精通しています。以下は私のコードです。ありがとう!

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()); 

     } 



    } 

答えて

0

私はあなたが一歩踏み出し、このステップバイステップに取り組む必要があると思います。 AWSとのやりとりをしているコードの部分に到達していないため、今はすべてのAWSのことを忘れてしまいます。ファイルをS3にコピーすることを心配する前に、まずファイルアップロードの作業を開始する必要があります。これを行うには、コンパイラがあなたに何を伝えているのか把握する必要があります。我々はuploadServletFileUploadのインスタンスであることがわかり数行を見上げる

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

はのは、この2行を見てみましょう。だから、のthe documentationに行きましょう。ドキュメントには、このメソッドシグネチャを示しています。それだけでListオブジェクトを返しませんどのように

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

お知らせ、それが実際にList<FileItem>オブジェクトを返します。 (List)にキャストしていたときに、あなたはその情報を捨てていました。それでは、FileItemを使用するようにコードを変更してみましょう、我々はそれに取り組んでいる一方で、なぜこれほどのような古い学校Iteratorの代わりにJava For-Each loopを使用しない:

List<FileItem> formItems = upload.parseRequest(request); 
for (FileItem item : formItems) { 
    ObjectMetadata om = new ObjectMetadata(); 
    om.setContentLength(item.getSize()); 
関連する問題