今天又遇到一个问题:怎样将文件上传到局域网内的另外一台机器上。解决方案粗略的想了下大概有以下几种:
1.搭建一台FTP服务器,而后经过FTP协议进行文件传输。这个方式当然有效,可是有点麻烦。
2.经过Socket
来传输文件,这种方法须要编写一个客户端和一个服务端,这种方案比较通用,在其余方案不可行的状况下,这种方案仍是不错的。
3.搭建一台HTTP服务器(例如tomcat),上传文件时直接将文件上传到这台机器上,须要部署用来上传文件的应用。
4.若是是windows系统能够采起最简单的形式来完成文件传输(文件共享)。java
本文最要用第4个方式来完成此功能:
首先在你想要保存上传文件的计算机上设置文件共享,例如本文共享的是image文件夹:
右键image文件夹 -> 属性 -> 共享 -> 文件和文件夹共享
注意:必定要添加Evenyone
用户,而且要给读写
的权限。
共享完成后,开始 -> 运行,输入\\192.168.0.67\image
(根据实际状况输入你本身的ip)打开共享文件目录。
如下是java代码:算法
public class Test { public static void main(String[] args) throws Exception { String srcPath = "c:\\pic.jpg"; File parentDir = new File("\\\\192.168.0.67\\image"); File targetPath = new File(parentDir, UUID.randomUUID().toString().replaceAll("-", "") + ".jpg"); InputStream in = new FileInputStream(srcPath); OutputStream out = new FileOutputStream(targetPath); try { byte[] bs = new byte[1024]; int len = -1; while((len = in.read(bs)) != -1) { out.write(bs, 0, len); } } finally { try { out.close(); } catch (Exception e) { e.printStackTrace(); } try { in.close(); } catch (Exception e) { e.printStackTrace(); } } System.out.println("上传成功!!"); } }
本例只是将本地的一个图片文件上传到局域网内的计算机,File parentDir = new File("\\\\192.168.0.67\\image")
注意后面的 文件路径,\\\\后面紧跟着局域网IP地址,后面是共享文件的目录,接下来与操做普通文件同样进行操做, 经过流写到目标位置。文件名是经过UUID来生成,除掉其中的-
,关于文件目录打散:能够经过一些算法来生成文件目录,例如:经过yyyy/MM/dd
的日期格式来建立文件夹,也能够经过文件名的哈希码进行一些处理来生成目录。
经过下图看到,图片确实已经上传上传上去了:
windows