将图像和视频文件从 Android 发送到服务器并接收处理后的内容

Doo*_*oon 4 java sockets android image-processing

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

我试图通过流来完成它(在 android LogCat 上找不到共享库错误),但我也无法管理如何做到这一点。

提前致谢

Luk*_*uth 5

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

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

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

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


现在,到它的技术部分:

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

  • 使用以下命令打开与您的服务器的连接Socket
  • 在您的文件上获取流(在您的情况下,为 a FileInputStream
  • byte读取数组中的二进制数据块
  • 将读取的块从 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.
}
Run Code Online (Sandbox Code Playgroud)

这段代码忽略了这里可能抛出异常的事实。您需要以适当的方式处理这些问题。


您应该考虑到的是,用户可能会从移动互联网连接上传其内容,这可能会被拦截(例如在穿过隧道时)。在这种情况下,您需要实现可恢复的上传/下载。