首先,在回答问题的特定部分之前,这里有一些一般性建议:
尝试在设备上做一些琐碎的事情.仅在图像上放置遮罩或对其旋转/调整大小非常简单,可以在设备上执行.这样,用户无需上传任何内容(并等待),并且服务器的负载也不会那么重.
视频和图片可能会变得很大.考虑到这一点.我想到的一个想法是,用户应该仅上传一次图像/视频,但是应该能够执行多种操作,然后再下载最终结果.否则,您将面临漫长的等待时间和高流量.
告诉您的用户!如果您真的开始将(也许是个人的)图片/视频上传到自己的服务器,请确保您使用的是可获得的最大安全性(SSL应该是必须的),并告诉用户您要将其内容上传到您的服务器.另外,您应该给他们选择拒绝的选择,否则,您可能会面临诉讼.
现在,到技术部分:
从服务器上载文件/从服务器上载文件的工作流程几乎总是相同的:
>使用Socket打开与服务器的连接
>在文件上获取流(对于您的情况,为FileInputStream)
>读取字节数组中的二进制数据块
>将读取的块从套接字写入输出流
>完成后,关闭流,然后关闭套接字
在您的服务器上,您可以进行其他操作并从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实现为可恢复.