4

我想将视频/图像从 android 手机发送到服务器并接收处理后的视频/图像。(例如,我发送图像并以二进制图像或灰度或调整大小等形式接收该图像) 最好和最简单的方法是什么?网址?插座?XML?怎么做?

我试图通过流(Shared Library not found error on android LogCat)来做到这一点,但我也无法管理如何做到这一点。

提前致谢

4

1 回答 1

5

首先,在回答您问题的特定部分之前,这里有一些一般性建议:

尝试在设备上做一些琐碎的事情。只需在图像上放置一个蒙版或旋转/调整它的大小非常简单,可以在设备上执行。这样,用户不需要上传任何东西(并等待),并且您的服务器负载不会那么重。

视频和图片可以变大。考虑到这一点。想到的一个想法是,用户应该只上传一次图像/视频,但应该能够在下载最终结果之前执行多次操作。否则,您最终将面临漫长的等待时间和高流量。

告诉你的用户!如果您真的开始将(可能是个人的)图片/视频上传到您自己的服务器,请确保您使用可以获得的最大安全性(SSL 应该是必备的)并告诉您的用户您会将他们的内容上传到你的服务器。此外,您应该让他们选择拒绝,否则您可能会面临诉讼。


现在,到它的技术部分:

从服务器上传/下载文件的工作流程几乎总是相同的:

  • 使用Socket
  • 在您的文件上获取流(在您的情况下为 a FileInputStream
  • byte读取-array中的二进制数据块
  • 将读取的块写入 Socket 的输出流
  • 完成后,关闭流,然后关闭套接字

在您的服务器上,您以相反的方式执行此操作并从 InputStream 读取,将内容写入FileOutputStream.

这是一个看起来如何的小例子:

Socket server = new Socket("192.168.178.32", 1337);
OutputStream outputStream = server.getOutputStream();
FileInputStream in = null;
try {
    in = new FileInputStream("/some/path/to/gras.jpeg");
    // Write to the stream:
    byte[] buffer = new byte[1024]; // 1KB buffer size
    int length = 0;
    while ( (length = in.read(buffer, 0, buffer.length)) != -1 ){
        outputStream.write(buffer, 0, length);
    }
    outputStream.flush();
} finally {
    if (in != null) in.close();
    socket.close(); // Will close the outputStream, too.
}

此代码忽略了此处可能引发异常的事实。您需要以适当的方式处理这些问题。


您应该考虑的一点是,用户可能会从移动互联网连接上传他们的内容,这可能会被拦截(例如通过隧道时)。在这种情况下,您需要将 up/download 实现为可恢复。

于 2012-06-30T16:45:56.827 回答