今天又遇到一個問題:怎樣將文件上傳到局域網內的另外一臺機器上。解決方案粗略的想了下大概有以下幾種:
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