2014-07-24 1 views
1

Я хочу загрузить изображение на FTP-сервер. В настоящее время я использую JDeveloper 12c (12.1.3.0).Загрузить изображение на FTP-сервер с помощью мобильного приложения ADF

Мой код:

private static final int BUFFER_SIZE = 4096; 
public String fileUploadMethod(String imagePath){ 
    String ftpUrl = "ftp://"; 
    String host = "http://192.168.0.42"; 
    String user = "XXXXXX"; 
    String pass = "XXXXXX"; 
    String filePath = "783771-1.jpg"; 
    String uploadPath = imagePath; 
    ftpUrl =ftpUrl + user +":"+ pass+"@"+host+"/"+filePath+";"; 
    System.out.println("Upload URL: " + ftpUrl); 

    try { 
     URL url = new URL(ftpUrl); 
     URLConnection conn = url.openConnection(); 
     OutputStream outputStream = conn.getOutputStream(); 
     FileInputStream inputStream = new FileInputStream(uploadPath); 

     byte[] buffer = new byte[BUFFER_SIZE]; 
     int bytesRead = -1; 
     while ((bytesRead = inputStream.read(buffer)) != -1) { 
       outputStream.write(buffer, 0, bytesRead); 
     } 

     inputStream.close(); 
     outputStream.close(); 

     System.out.println("File uploaded"); 
       return "File uploaded"; 
     } catch (IOException ex) { 
       ex.printStackTrace(); 
     } 
    return null; 
} 

Я получаю сообщение об ошибке MalformedURLException т.е. подробно сообщение «неизвестный протокол: FTP»

Есть ли другой вариант, чтобы загрузить изображение с помощью JDeveloper.

Любая идея относительно этого.

Спасибо, Сиддхарт

ответ

0

Ваш ftpUrl неправильно. Удалите http:// в переменной хоста. Должно быть хорошо,

+0

Я пробовал это, удалив http: //, но все еще не работая. – Siddh

0

Я еще не пробовал загружать ftp. Но я попытался с загрузкой многостраничной формы. Насколько мне известно, MAF не предоставляет поддержку Out-Of-Box для загрузки файлов. То, что я сделал, было существенным воссозданием потока HTTP для загрузки изображения.

Код POC приведен ниже. Это может быть определенная реализация CRUDEST, но я не уверен, есть ли лучший способ.

public void doUpload() { 
     try { 
      DeviceManager dm = DeviceManagerFactory.getDeviceManager(); 
      String imgData = 
       dm.getPicture(50, DeviceManager.CAMERA_DESTINATIONTYPE_FILE_URI, DeviceManager.CAMERA_SOURCETYPE_CAMERA, 
           false, DeviceManager.CAMERA_ENCODINGTYPE_PNG, 0, 0); 
      imgData = imgData.substring(7, imgData.length()); 
      int start = imgData.lastIndexOf('/'); 
      String fileName = imgData.substring(start+1, imgData.length()); 
      RestServiceAdapter restServiceAdapter = Model.createRestServiceAdapter(); 
      restServiceAdapter.clearRequestProperties(); 
      String requestMethod = RestServiceAdapter.REQUEST_TYPE_POST; 
      String requestEndPoint = restServiceAdapter.getConnectionEndPoint("serverBaseUrl"); 
      String requestURI = "/workers/100000018080264"; 
      String request = requestEndPoint + requestURI; 
      HashMap httpHeadersValue = new HashMap(); 
      httpHeadersValue.put("X-ANTICSRF", "TRUE"); 
      httpHeadersValue.put("Connection", "Keep-Alive"); 
      httpHeadersValue.put("content-type","multipart/form-data; boundary=----------------------------4abf1aa47e18"); 
      // Get the connection 
      HttpConnection connection = restServiceAdapter.getHttpConnection(requestMethod, request, httpHeadersValue); 
      OutputStream os = connection.openOutputStream(); 
      byte byteBuffer[] = new byte[50]; 
      int len; 
      //String temp is appended before the image body 
      String temp = "------------------------------4abf1aa47e18\r\nContent-Disposition: form-data; name=\"file\"; filename=\"" +fileName+ "\"\r\nContent-Type: image/jpeg\r\n\r\n"; 
      InputStream stream = new ByteArrayInputStream(temp.getBytes("UTF-8")); 
      if (stream != null) { 
       while ((len = stream.read(byteBuffer)) >= 0) { 
        os.write(byteBuffer, 0, len); 
       } 
       stream.close(); 
      } 
      FileInputStream in = new FileInputStream(imgData); 
      if (in != null) { 
       while ((len = in.read(byteBuffer)) >= 0) { 
        os.write(byteBuffer, 0, len); 
       } 
       in.close(); 
      } 
      //The below String is appended after the image body 
      InputStream stream2 =new ByteArrayInputStream("\r\n------------------------------4abf1aa47e18--\r\n".getBytes("UTF-8")); 
      if (stream2 != null) { 
       while ((len = stream2.read(byteBuffer)) >= 0) { 
        os.write(byteBuffer, 0, len); 
       } 
       stream2.close(); 
      } 
      int status = connection.getResponseCode(); 
      InputStream inputStream = restServiceAdapter.getInputStream(connection); 
      ByteArrayOutputStream incomingBytes = new ByteArrayOutputStream()   // get and process the response. 
      while ((len = inputStream.read(byteBuffer)) >= 0) { 
       incomingBytes.write(byteBuffer, 0, len); 
      } 
      String ret = incomingBytes.toString(); 
      incomingBytes.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+0

FTP-соединение и выполнение HTTP-соединения разные. Я хочу загрузить только FTP. – Siddh

+0

Поскольку сервер не поддерживает загрузку изображений с помощью MultiPart i.e Http Connection ... – Siddh