2013-02-26 7 views
1

나는 10 분마다 사용자의 GPS 위치와 시간을 기록하고 .txt 파일에 저장하는 내 Android 앱을 이미 개발했습니다. 이제이 파일을 서버로 보내야합니다. 지금은 FTP를 사용하고 있지만,이 방법을 10.000 사용자 이상으로 확장하여 FTP 접근 방식이 좋지 않은 것으로 보이기 때문에 올바른 것 같지 않습니다. 파일을 서버로 보내는 다른 방법에는 무엇이 있습니까? 상대적으로 안전해야합니다. 시간 내 주셔서 감사합니다서버로 파일 보내기 android

편집 : 모든 답변은 나에게 매우 좋지만, 보안 연결을 제공하고 암호가 FTP 인 이유는 내가 아는 한 유일한 해결책입니다. 웹 요청을하고 올바른 암호로 클라이언트 만 수락 할 수 있습니까?

+1

당신은 아마 정말 안전하지 않습니다 응용 프로그램에서 암호를 하드 코딩되어있다. 앱을 실제로 설치 한 사용자의 데이터 만 가져 오도록보다 안전한 솔루션을 원한다면 http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android .html – satur9nine

답변

0

나는 귀하의 질문에 또는 적어도 묵시적으로 대답하지 않지만 일괄 처리 된 HTTP 요청 사용을 고려했는지 알고 있습니까?

Google 애널리틱스가 작동하는 방식으로 사례 위치 데이터에 여러 이벤트가 기록되고 정기적으로 일괄 처리가 서버로 전송됩니다.

파일을 망칠 때보 다 훨씬 쉽습니다.

사용자의 배터리 수명을 적극적으로 절약하려면 다른 사람이 네트워크를 시작한 경우에만 요청을 보냅니다. Reto Meier의 훌륭한 Google I/O 2012 세션이 있습니다.

+0

내 편집을 확인해 보면 대답이 매우 좋아 보이지만 추가 정보가 필요합니다. –

0

andFTP을 sftp 모드로 보내 주시면 해당 앱을 인 텐트로 사용하는 방법에 대한 FAQ를 볼 수 있습니다.

0

이렇게하는 한 가지 방법은 클라이언트가 원격 서버에서 웹 서비스를 호출하여 요청과 함께 데이터를 보내도록하는 것입니다 (일반적으로 JSON에 있지만 실제로는 아무것도 될 수 있음). 그런 다음 웹 서비스에서이 데이터를 가져 와서 처리하고 클라이언트에게 응답을 보냅니다. 응답은 성공 또는 실패 또는 원하는 승/중 하나입니다.

0

나는 (Funf에서 주로 촬영) 다음 코드는이 목적을 위해 잘 작동 것으로 나타났습니다 :

public static boolean uploadFile(File file, String uploadurl) { 
    HttpURLConnection conn = null; 
    DataOutputStream dos = null; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 
    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 64 * 1024; 
    FileInputStream fileInputStream = null; 
    boolean isSuccess = true; 
    try { 
     // ------------------ CLIENT REQUEST 
     try { 
      fileInputStream = new FileInputStream(file); 
     } catch (FileNotFoundException e) {} 
     URL url = new URL(uploadurl); 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     conn.setUseCaches(false); 
     conn.setConnectTimeout(60000); 
     conn.setReadTimeout(60000); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Connection", "Keep-Alive"); 
     conn.setRequestProperty("Content-Type", 
      "multipart/form-data;boundary=" + boundary); 
     dos = new DataOutputStream(conn.getOutputStream()); 
     dos.writeBytes(twoHyphens + boundary + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; " 
      + "name=\"uploadedfile\";filename=\"" 
      + file.getName() + "\"" + lineEnd); 
     dos.writeBytes(lineEnd); 
     bytesAvailable = fileInputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     buffer = new byte[bufferSize]; 
     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     while (bytesRead > 0) { 
      dos.write(buffer, 0, bufferSize); 
      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     } 
     dos.writeBytes(lineEnd); 
     dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 
    } catch (Exception e) { 
     isSuccess = false; 
    } finally { 
     if (dos != null) { 
      try { 
       dos.close(); 
      } catch (IOException e) { 
       // do something 
      } 
     } 
     if (fileInputStream != null) { 
      try { 
       fileInputStream.close(); 
      } catch (IOException e) { 
       // do something 
      } 
     } 
    } 
    // ------------------ read the SERVER RESPONSE 
    try { 
     if (conn.getResponseCode() != 200) { 
      isSuccess = false; 
     } 
    } catch (IOException e) { 
     isSuccess = false; 
    } 
    return isSuccess; 
} 
+0

코드가 매우 잘 보이지만 어떻게 서버 보안을 통해 구현할 수 있습니까? 어떻게 아십니까? –

관련 문제