首先,在回答您问题的特定部分之前,这里有一些一般性建议:
尝试在设备上做一些琐碎的事情。 只需在图像上放置蒙版或旋转/调整图像大小非常简单,并且可以在设备上执行。这样,用户无需上传任何内容(等待),您的服务器也不会那么重。
视频和图片可以变大。考虑到这一点。想到的一个想法是,用户应该只上传一次图像/视频,但应该能够在下载最终结果之前执行多次操作。否则,您最终将面临漫长的等待时间和高流量。
告诉您的用户!如果您真的开始将(可能是个人的)图片/视频上传到您自己的服务器,请确保您使用可以获得的最大安全性(SSL 应该是必须的-有)并告诉您的用户您会将他们的内容上传到您的服务器。此外,您应该让他们选择拒绝,否则您可能会面临诉讼。
现在,到它的技术部分:
从服务器上传/下载文件的工作流程几乎总是相同的:
- 使用
Socket 打开到您的服务器的连接
- 在您的文件中获取流(在您的情况下为
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.
}
此代码忽略了此处可能引发异常的事实。您需要以适当的方式处理这些问题。
您应该考虑的一点是,用户可能会从移动互联网连接上传他们的内容,这些内容可能会被拦截(例如通过隧道时)。在这种情况下,您需要将上传/下载实现为可恢复。