我想将视频/图像从 android 手机发送到服务器并接收处理后的视频/图像。(例如,我发送图像并以二进制图像或灰度或调整大小等形式接收该图像) 最好和最简单的方法是什么?网址?插座?XML?怎么做?
我试图通过流(Shared Library not found error on android LogCat)来做到这一点,但我也无法管理如何做到这一点。
提前致谢
我想将视频/图像从 android 手机发送到服务器并接收处理后的视频/图像。(例如,我发送图像并以二进制图像或灰度或调整大小等形式接收该图像) 最好和最简单的方法是什么?网址?插座?XML?怎么做?
我试图通过流(Shared Library not found error on android LogCat)来做到这一点,但我也无法管理如何做到这一点。
提前致谢
首先,在回答您问题的特定部分之前,这里有一些一般性建议:
尝试在设备上做一些琐碎的事情。只需在图像上放置一个蒙版或旋转/调整它的大小非常简单,可以在设备上执行。这样,用户不需要上传任何东西(并等待),并且您的服务器负载不会那么重。
视频和图片可以变大。考虑到这一点。想到的一个想法是,用户应该只上传一次图像/视频,但应该能够在下载最终结果之前执行多次操作。否则,您最终将面临漫长的等待时间和高流量。
告诉你的用户!如果您真的开始将(可能是个人的)图片/视频上传到您自己的服务器,请确保您使用可以获得的最大安全性(SSL 应该是必备的)并告诉您的用户您会将他们的内容上传到你的服务器。此外,您应该让他们选择拒绝,否则您可能会面临诉讼。
现在,到它的技术部分:
从服务器上传/下载文件的工作流程几乎总是相同的:
Socket
FileInputStream
)byte
读取-array中的二进制数据块在您的服务器上,您以相反的方式执行此操作并从 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 实现为可恢复。