【问题标题】:Send file to server android将文件发送到服务器android
【发布时间】:2013-02-26 00:12:05
【问题描述】:

我已经开发了我的 android 应用程序,该应用程序每 10 分钟记录一次用户的 GPS 位置和时间,并将其保存到 .txt 文件中。 现在我需要将此文件发送到服务器。我现在使用 FTP 来做这件事,但这似乎不正确,因为我计划将其扩展到大约 10.000 个用户或更多,因此 FTP 方法似乎并不好。 我可以使用什么其他方式将文件发送到服务器?我需要这个相对安全。 感谢您的宝贵时间

编辑:所有答案对我来说都很好,但据我所知,唯一提供安全连接并只允许客户端为什么密码是 FTP 的解决方案。 是否可以发出网络请求并只接受具有正确密码的客户端?

【问题讨论】:

  • 您可能在应用程序中硬编码密码,这并不安全。如果您想要一个更安全的解决方案来确保您只从真正安装您的应用程序的用户那里获取数据:android-developers.blogspot.com/2013/01/…

标签: java android web-services rest soa


【解决方案1】:

我知道它没有回答您的问题,或者至少没有回答您的问题,但您是否考虑过使用批处理 HTTP 请求?

这就是谷歌分析的工作方式,它记录几个事件(在你的情况下是位置数据),然后定期向服务器发送一批。

这将比弄乱文件容易得多。

如果您想积极节省用户的电池寿命,您还可以考虑仅在其他人启动网络时发送请求。 Reto Meier 在 2012 年的 Google I/O 大会上对此进行了精彩的讨论。

【讨论】:

  • 检查我的编辑,你的答案看起来很好,但我需要一些额外的信息
【解决方案2】:

您可以尝试在 sftp 模式下通过 Intent 使用andFTP,请参阅他们的常见问题解答,了解如何将该应用用作 Intent。

【讨论】:

    【解决方案3】:

    这样做的一种方法是让客户端调用远程服务器上的 Web 服务,将数据与请求一起发送(通常是 JSON,但实际上可以是任何东西)。然后,Web 服务将获取此数据,对其进行处理并将响应发送回客户端。响应将是成功或失败,或者你想要的。

    【讨论】:

      【解决方案4】:

      我发现以下代码(主要来自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;
      }
      

      【讨论】:

      • 代码看起来很不错,但我怎样才能通过一些服务器安全性来实现呢?你知道怎么做吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多