2016-08-05 5 views
0

나는 사용자가 imgur 호스팅에 파일을 업로드하고 링크를 다시받을 수 있도록 허용하고 있습니다. 모든 것이 제대로 작동하는 것 같습니다. 그러나 나는 사용하고있다이미지 업로드 (파일 경로) - JSP

String itemName = item.getName();

Internet Explorer와 Eclipse 브라우저에서 완벽하게 작동합니다. 그러나 파이어 폭스와 크롬의 경우 브라우저 보안 때문에 파일 이름 만 입력 필드에서 검색됩니다. 작동 시키려면 해결 방법은 무엇입니까?

내 코드 : -

private void processlist(HttpServletRequest request, 
    HttpServletResponse response) { 
     boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
     if (!isMultipart) { 
     } else { 
      FileItemFactory factory = new DiskFileItemFactory(); 
      ServletFileUpload upload = new ServletFileUpload(factory); 
      List items = null; 
      try { 
       items = upload.parseRequest(request); 
      } catch (FileUploadException e) { 
       e.printStackTrace(); 
      } 
      Iterator itr = items.iterator(); 
      while (itr.hasNext()) { 
       FileItem item = (FileItem) itr.next(); 
       if (item.isFormField()) { 
       } else { 
        try { 
         String itemName = item.getName(); 


         BufferedImage img = null; 
         try { 
          img = ImageIO.read(new File(itemName)); 
         } catch (IOException e) { 
         } 

         String IMGUR_POST_URI = "https://api.imgur.com/3/upload"; 
         String IMGUR_API_KEY = "mykeyyyyyyyyyyyy"; 
         String projectname = ""; 
         try { 
          ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
          System.out.println("Writing image..."); 
          ImageIO.write(img, "png", baos); 
          URL url = new URL(IMGUR_POST_URI); 

          System.out.println("Encoding..."); 
          String data = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder 
            .encode(Base64.encodeBase64String(baos.toByteArray()).toString(), "UTF-8"); 
          data += "&" + URLEncoder.encode("key", "UTF-8") + "=" 
            + URLEncoder.encode(IMGUR_API_KEY, "UTF-8"); 

          System.out.println("Connecting..."); 
          URLConnection conn = url.openConnection(); 
          conn.setDoOutput(true); 
          conn.setDoInput(true); 
          conn.setRequestProperty("Authorization", "Client-ID " + IMGUR_API_KEY); 
          conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

          OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

          System.out.println("Sending data..."); 
          wr.write(data); 
          wr.flush(); 

          System.out.println("Finished."); 

          // just display the raw response 
          BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
          String line; 
          while ((line = in.readLine()) != null) { 
           JSONObject jObject = new JSONObject(line); 
           JSONObject data1 = jObject.getJSONObject("data"); 
           projectname = data1.getString("link"); 
           if (flagAccessed == false) { 
            img1 = projectname; 
           } else { 
            img2 = projectname; 
           } 
           System.out.print(projectname); 

내 JSP 코드는 간단한 양식입니다 : - :의 InputStream를 액세스 할 수있는 서버 가 img = ImageIO.read(item.getInputStream());를 사용하는 img = ImageIO.read(new File(itemName)); 변경 허용

<form action="UploadServlet" method="post" enctype="multipart/form-data" name="form1" id="form1" style="text-align:center;display:inline;"> 
<table border="1" style="text-align:center;"> 
         <td><center> 
           Select image1: <input name="file" type="file" id="file" class="btn btn-dark btn-lg12"> 
          </center></td> 
        </tr> 

        <tr> 
         <td><center> 
           Select image2: <input name="file" type="file" id="file" class="btn btn-dark btn-lg12"> 
          </center></td> 
        </tr> 
        <tr> 
         <td align="center" style="margin-top: 5px;"></td> 
        </tr> 

       </table> 


      <br> 
      <br> 
      <input type="submit" name="Submit" value="Submit files" class="btn btn-dark btn-lg"/> 

      </form> 
+0

귀하의 질문을 이해하고 싶습니다. IE에서'items'는 FileItem 객체의 목록이고 Firefox/Chrome에서는 문자열 목록입니다. 또는 파일 내용이 해당 브라우저에 업로드되지 않았습니까? – LAROmega

+0

@LAROmega : IE에서 문자열 itemName = item.getName(); return ... "C : \ path \ filename.jpg"... 간단히 말해서 내가 말하고자하는 것은 적절한 파일 경로를 반환하는 것입니다. 그래서 내 코드가 작동합니다. Firefox 및 Chrome에서 문자열 itemName = item.getName(); filename.jpg와 같은 파일 이름 만 반환하므로 imgur에 보낼 때 내 img = null이 반환됩니다. – starry

+0

나는 IE가 여기 나쁜 사람이라고 말할 것이다. 서버가 클라이언트의 파일에 대한 전체 경로를 알아야 할 필요는 없습니다. 그러나 수정이 쉬워야합니다. 'if (item.getName()! = null && item.getName(). contains ("\\ /")'그런 다음 구문 분석합니다. 그렇지 않으면 item.getName()을 사용하십시오. 슬래시를 이스케이프 처리해야합니까? – LAROmega

답변

0

수정 프로그램을 요약하면 이미지. Internet Explorer가 FileItem의 이름에 전체 파일 경로를 제공하더라도 파일이 개발 환경과 같이 서버와 클라이언트에서 정확히 동일한 위치에있는 환경에서만 작동합니다.