分析
今天又遇到一個問題:怎樣將文件上傳到局域網內的另一台機器上。解決方案粗略的想了下大概有如下幾種:
1.搭建一台FTP服務器,然后通過FTP協議進行文件傳輸。這個方式固然有效,但是有點麻煩。
2.通過Socket
來傳輸文件,這種方法需要編寫一個客戶端和一個服務端,這種方案比較通用,在其他方案不可行的情況下,這種方案還是不錯的。
3.搭建一台HTTP服務器(例如tomcat),上傳文件時直接將文件上傳到這台機器上,需要部署用來上傳文件的應用。
4.如果是windows系統可以采取最簡單的形式來完成文件傳輸(文件共享)。
采用windows文件夾共享來實現
本文最要用第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
的日期格式來創建文件夾,也可以通過文件名的哈希碼進行一些處理來生成目錄。
通過下圖看到,圖片確實已經上傳上傳上去了: