linux共用文件samba安裝與java讀取外部文件夾方法

来源:http://www.cnblogs.com/tangmj/archive/2016/02/14/5188765.html
-Advertisement-
Play Games

測試環境RedHat 6.4 一.安裝 samba組件安裝: (1)首先用“rpm –qa |grep samba”命令檢驗系統samba服務是否安裝。 #rpm –qa |grep samba samba-common-3.6.9-151.el6.x86_64.rpm samba-winbind-


測試環境RedHat 6.4

一.安裝

    samba組件安裝:

(1)首先用“rpm –qa |grep samba”命令檢驗系統samba服務是否安裝。

#rpm –qa |grep samba

samba-common-3.6.9-151.el6.x86_64.rpm

samba-winbind-3.6.9-151.el6.x86_64.rpm

samba-winbind-clients-3.6.9-151.el6.x86_64.rpm

samba-3.6.9-151.el6.x86_64.rpm

(2)如果沒有顯示samba(版本)信息,則說明沒有安裝,利用“RedHat Linux安裝光碟”里自帶的RPM包進行安裝(也可自己在網上下載相關的版本包進行安裝)。(可以通過壓縮工具打開RedHat的鏡像iso文件,在rpm包目錄下可以找到相關samba的包)

rpm -ivh samba-common-3.6.9-151.el6.x86_64.rpm -f --nodeps

rpm -ivh samba-winbind-3.6.9-151.el6.x86_64.rpm -f --nodeps

rpm -ivh samba-winbind-clients-3.6.9-151.el6.x86_64.rpm -f --nodeps

rpm -ivh samba-3.6.9-151.el6.x86_64.rpm -f –nodeps

rpm -ivh samba4-libs-4.0.0-55.el6.rc4.x86_64.rpm –f –nodeps

rpm -ivh samba-client-3.6.9-151.el6.x86_64.rpm –f -nodeps

卸載命令:# rpm -e [包名]

或者強制卸載: # rpm -e --nodeps [包名]

二.Samba的smb.conf文件配置

cd /etc/samba

mv smb.conf smb_bak.conf(備份源文件)

touch smb.conf

將下文複製進smb.conf中:

[gobal]

  workgroup = LinuxSir

  netbios name = RedHat

  server string = Linux Samba Server

  security = user

  hosts allow = 192.168.1. 192.168.2. 127.

[public]

  path = /XXXX/shareimg

  writeable = yes

  valid users = root

  browseable = yes

  guest ok = no

(public為訪問時的路徑名,path為系統實際路徑)

文件配置介紹:

全局選項用於[global]的<section>選項定義中,其用於說明samba伺服器的一些基本屬性。其有些選項可以被其他<section>中的選項定義覆蓋。

workgroup = MYGROUP

定義samba伺服器所在的工作組或者域(如果設置security = domain的話)。

server string = Samba server

設定samba伺服器的描述,通過網路鄰居訪問時可在備註中查看到該描述信息。

hosts allow = host (subnet)

設定允許訪問該samba伺服器的主機IP或網路,該選項的值為列表類型,不同的項目之間使用空格或逗號隔開,例如hosts allow = 192.168.3.0, 192.168.1.1,該選項設置允許主機192.168.1.1以及子網192.168.3.0/24內的所有主機訪問該samba伺服器。

hosts deny = host (subnet)

設定不允許訪問該samba伺服器的主機IP或網路,其格式與hosts allow一樣。

guest account = guest

設定了游客的賬號,在游客訪問guest ok = yes的共用服務時,samba伺服器將設置客戶端以該游客賬號來訪問共用。

log file = MYLOGFILE

設定記錄文件的位置。

max log size = size

設定記錄文件的大小,單位為KB,如果設置為0則表示無大小限制。

security =

設定samba伺服器的安全級,其有四種安全級別:share、user、server和domain,預設為user。關於這四種安全級別的詳細信息,請查看相關文檔。

password server = ServerIP

設定了用戶賬號認證伺服器IP,其在設定security = server時有效。

encrypt passwords = yes | no

設定是否對密碼進行加密。如果不對密碼進行加密的話,在認證會話期間,客戶端與伺服器傳遞的是明文密碼。但有些Windows系統預設情況下,不支持明文密碼傳輸。

passdb backend = smbpasswd | tdbsam | ldapsam

設定samba伺服器訪問和存儲samba用戶賬號的後端,在samba-3.0。23之前的預設值為smbpasswd,而之後的預設值為tdbsam。

smb passwd file =

設定samba的用戶賬號文件。對於源代碼安裝的samba,在samba-3.0.23之前,其預設值為/user/local/samba /private/smbpasswd;而samba-3.0.23之後,其預設值為/usr/local/samba/private /passwd.tdb。

include = smbconfFile

通過include選項可以包含其他配置文件,通過該選項和一些samba定義的變數可以設定與不同機器相關的配置。

local master = yes | no

設定該samba伺服器是否試圖成為本地主瀏覽器,預設值為yes。若設置為no,則該samba伺服器永遠不可能成為本地主瀏覽器,而設置為yes不代表其一定能成為本地主瀏覽器,只是讓其能參與本地主瀏覽器的選舉。

os level = N

N是一個整數,設定了該samba伺服器參加本地主瀏覽器選舉時的權重,其值越大,權重越大。os level = 0時,該伺服器將失去選舉的機會。

domain master = yes | no

設定samba伺服器成為域瀏覽器。域瀏覽器從各個本地主瀏覽器處獲取瀏覽列表,並將整個域的瀏覽列表傳遞給各個本地主瀏覽器。

preferred master = yes | no

設定該samba伺服器是否為工作組裡的首要主瀏覽器,如果設置為yes,則在nmbd啟動時,將強制一個瀏覽選擇。

局部選項:

局部選項為除了global外的各個<section>中的參數。其定義了共用服務的屬性。

comment =

設定共用服務的描述信息。

path =

設定共用服務的路徑,其中可以結合samba預定義的變數來設置。

hosts allow = host(subnet)

hosts deny = host(subnet)

與全局的hosts allow和hosts deny含義相同,其會覆蓋全局的設置。

read only = yes | no

設定該共用服務是否為只讀,該選項有一個同義選項writeable。

user = user(@group)

設定所有可能使用該共用服務的用戶,可以使用@group來設置群組group中的所有用戶賬號。該選項的值為列表,不同的項目之間使用空格或逗號 隔開。在設置security = share時,客戶端要訪問某共用服務時提供的密碼會與該選項指定的所有用戶進行一一配對認證,若某用戶認證通過,則以該用戶許可權進行共用服務訪問,否則 拒絕客戶端的訪問(設置security = share不是允許游客訪問,只有guest ok = yes才是允許游客訪問,切記!!!)。

valid users = user(@group)

設定能夠使用該共用服務的用戶和組,其值的格式與user選項一樣。

invalid users = user(@group)

設定不能夠使用該共用服務的用戶和組,其值的格式與user選項一樣。

read list = user(@group)

設定對該共用服務只有讀取許可權的用戶和組,其值的格式與user選項一樣。

write list = user(@group)

設定對該共用服務擁有讀寫許可權的用戶和組,其值的格式與user選項一樣。

admin list = user(@group)

設定對該共用服務擁有管理許可權的用戶和組,其值的格式與user選項一樣。

public = yes | no

設定該共用服務是否能夠被游客訪問,其同義選項有guest ok。

create mode = mode

mode為八進位值,如0755,其預設值為0744。該選項指定的值用於過濾新建文件的訪問許可權,新建文件的預設許可權將與create mode指定的值進行按位與操作,將結果再與force create mode指定的值進行按位或操作,得到的結果即為新建文件的訪問許可權。

force create mode = mode

mode為八進位值,預設為0000。其作用參考選項create mode。

directory mode = mode

mode為八進位值,預設為0755。該選項指定的值用於過濾新建目錄的訪問許可權,新建目錄的預設許可權將與directory mode指定的值進行按位與操作,將結果再與force directory mode指定的值進行按位或操作,得到的結果即為新建目錄的訪問許可權。

force directory mode = mode

mode為八進位值,預設為0000。該選項的作用參考選項directory mode。

force user = user

強制設定新建文件的屬性onwer。若存在一個目錄,其允許guest可以寫,則guest就可以刪除。但設定force user為其他用戶,並設置create mode = 0755,則gues用戶不能夠刪除其新建文件。

三.新建共用目錄

#mkdir /XXXX/shareimg

#chmod 777 /XXXX/shareimg //讓所有用戶具有完全許可權(預設用戶為root)

四.將root用戶加入smb的用戶列表中

#smbpasswd –a root  //將root用戶添加為samba用戶,需設置訪問密碼

或者可以新建一個用戶

#useradd cc   //添加cc用戶

#passwd cc   //設置cc用戶的口令

如果用新用戶,需修改共用文件夾所有者

chown -R cc.cc /XXXX/shareimg

並且修改smb.conf中的valid users = cc

#smbpasswd –a cc  //將cc用戶添加為samba用戶,需設置訪問密碼

五.啟動服務

設置開機自啟動:

chkconfig --level 2345 smb on

chkconfig --level 2345 nmb on 

service smb start

service nmb start

在下麵問題修複後請重啟服務:

service smb restart

service nmb restart

另:需在開機啟動腳本/etc/rc.d/init.d/smb下添加一句話來防止啟動服務時無法訪問文件夾

……………

start() {

    KIND="SMB"

    echo -n $"Starting $KIND services: "

    setenforce 0  (加上此句)

    daemon smbd $SMBDOPTIONS

    RETVAL=$?

    echo

    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/smb || \

       RETVAL=1

    return $RETVAL

}  

…………

開機自啟動存在問題!!!

六.連接

Windows下:\\ip地址\public

七.問題

(1)可以登錄samba伺服器,但是沒有許可權訪問linux下的共用目錄

1、確保linux下防火牆關閉或者是開放共用目錄許可權  iptalbes -F
2、確保samba伺服器配置文件smb.conf設置沒有問題,可網上查閱資料看配置辦法
3、確保setlinux關閉,可以用setenforce 0命令執行。 預設的,SELinux禁止網路上對Samba伺服器上的共用目錄進行寫操作,即使你在smb.conf中允許了這項操作。

這兩個命令必須執行:

   iptables -F

   setenforce 0

(2)windows 刪除共用緩存

C:\Documents and Settings\Administrator>net use
會記錄新的網路連接。

狀態       本地        遠程                      網路


-------------------------------------------------------------------------------
OK           Z:        \\192.168.31.85\chrishome Microsoft Windows Network
OK                     \\192.168.31.88\dev-home  Microsoft Windows Network
命令成功完成。

C:\Documents and Settings\Administrator>net use \\192.168.31.88\dev-home /delete

\\192.168.31.88\dev-home 已經刪除。

八.基於SMB/JCIFS協議的共用文件上傳和下載(用於測試)

 1 package com.smb;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
 9 import java.io.InputStream;
10 import java.io.OutputStream;
11 
12 import jcifs.smb.SmbFile;
13 import jcifs.smb.SmbFileInputStream;
14 import jcifs.smb.SmbFileOutputStream;
15 
16 public class Smbtest {
17     /**
18      * 從區域網中共用文件中得到文件並保存在本地磁碟上
19      * @param remoteUrl 共用電腦路徑 如:smb//administrator:[email protected]/smb/1221.zip  , smb為共用文件
20      * 註:如果一直出現連接不上,有提示報錯,並且錯誤信息是 用戶名活密碼錯誤 則修改共用機器的文件夾選項 查看 去掉共用簡單文件夾的對勾即可。
21      * @param localDir 本地路徑 如:D:/
22      */
23     public static void smbGet(String remoteUrl,String localDir){
24         InputStream in = null;
25         OutputStream out = null;
26         try {
27             SmbFile smbFile = new SmbFile(remoteUrl);
28             String fileName = smbFile.getName();
29             File localFile = new File(localDir+File.separator+fileName);
30             in = new BufferedInputStream(new SmbFileInputStream(smbFile));
31             out = new BufferedOutputStream(new FileOutputStream(localFile));
32             byte []buffer = new byte[1024];
33             while((in.read(buffer)) != -1){
34                 out.write(buffer);
35                 buffer = new byte[1024];
36             }
37         } catch (Exception e) {
38             e.printStackTrace();
39         }finally{
40             try {
41                 out.close();
42                 in.close();
43             } catch (IOException e) {
44                 e.printStackTrace();
45             }
46         }
47     }
48     /**
49      * 把本地磁碟中的文件上傳到區域網共用文件下
50      * @param remoteUrl 共用電腦路徑 如:smb//administrator:[email protected]/smb
51      * @param localFilePath 本地路徑 如:D:/
52      */
53     public static void smbPut(String remoteUrl,String localFilePath){
54         InputStream in = null;
55         OutputStream out = null;
56         try {
57             File localFile = new File(localFilePath);
58             String fileName = localFile.getName();
59             SmbFile remoteFile = new SmbFile(remoteUrl+"/"+fileName);
60             in = new BufferedInputStream(new FileInputStream(localFile));
61             out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
62             byte[] buffer = new byte[1024];
63             while((in.read(buffer)) != -1){
64                 out.write(buffer);
65                 buffer = new byte[1024];
66             }
67         } catch (Exception e) {
68             e.printStackTrace();
69         }finally{
70             try {
71                 out.close();
72                 in.close();
73             } catch (IOException e) {
74                 e.printStackTrace();
75             }
76         }
77     }
78     
79     public static void main(String[] args) {
80         smbPut("smb://root:[email protected]/public", "E:/img/11.tmp");
81         smbGet("smb://root:[email protected]/public/1.jpg ", "E:/");
82 
83     }
84 
85 }
View Code

九.Web伺服器訪問外部文件夾

Jsp:

1 <h1>請求圖片</h1>
2 
3     <form name="userForm3" action="http://localhost:8080/naxincameraserver-war/userInfo/showPic"   enctype="multipart/form-data" method="post">
4 
5         <input type="text" name="pic" /><br/>
6 
7         <input type="submit" value="上傳">
8 
9     </form>
View Code

Servlet:

    Action中:(springMVC+spring+mybatis)

 1     @RequestMapping(value="/showPic",method = RequestMethod.POST)
 2 
 3     @ResponseBody
 4 
 5     public void showPicture(HttpServletRequest request,HttpServletResponse response){
 6 
 7         String url = request.getParameter("pic");
 8 
 9         System.out.println(url+"------------");
10 
11         response.setContentType("image/jpg"); //設置返回的文件類型
12 
13         try {
14 
15             OutputStream toClient=response.getOutputStream();
16 
17             SmbFiles.smbGet(url, "E:/",toClient);
18 
19         } catch (IOException e) {
20 
21             // TODO Auto-generated catch block
22 
23             e.printStackTrace();
24 
25         }
26 
27     }
View Code

修改Smbtest類:

 1 /**
 2 
 3      * 從區域網中共用文件中得到文件並保存在本地磁碟上
 4 
 5      * @param remoteUrl 共用電腦路徑 如:smb//administrator:[email protected]/smb/1221.zip  , smb為共用文件
 6 
 7      * 註:如果一直出現連接不上,有提示報錯,並且錯誤信息是 用戶名活密碼錯誤 則修改共用機器的文件夾選項 查看 去掉共用簡單文件夾的對勾即可。
 8 
 9      * @param localDir 本地路徑 如:D:/
10 
11      */ 
12 
13     public static void smbGet(String remoteUrl,String localDir,OutputStream toClient){ 
14 
15         InputStream in = null; 
16 
17         OutputStream out = null; 
18 
19         try { 
20 
21             SmbFile smbFile = new SmbFile(remoteUrl); 
22 
23             String fileName = smbFile.getName(); 
24 
25             File localFile = new File(localDir+File.separator+fileName); 
26 
27             in = new BufferedInputStream(new SmbFileInputStream(smbFile)); 
28 
29             out = new BufferedOutputStream(new FileOutputStream(localFile)); 
30 
31             byte []buffer = new byte[1024]; 
32 
33             while((in.read(buffer)) != -1){ 
34 
35                 out.write(buffer);
36 
37                 toClient.write(buffer);
38 
39                 buffer = new byte[1024]; 
40 
41             }
42 
43         } catch (Exception e) { 
44 
45             e.printStackTrace(); 
46 
47         }finally{ 
48 
49             try { 
50 
51                 out.close(); 
52 
53                 in.close();
54 
55                 toClient.close();
56 
57             } catch (IOException e) { 
58 
59                 e.printStackTrace(); 
60 
61             } 
62 
63         }
64 
65     }  
View Code
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: 首先展示一下這個iOS小示例的彩色進度條動畫效果: 閱讀本文先說說好處:對於基礎不好的讀者,可以直接閱讀文末尾的"如何使用彩虹動畫進度條"章節,然後將我封裝好的這個功能模塊類用到你的工程項目中即可。 這個效果的示例是老外Nick Jensen在2013年寫的一個作品:使用CAGradient
  • UCZProgressView 是一個帶有通用的圓形圖片進度下載控制項。動畫效果不錯 特性 Customizable indicator (line width, radius, and color) Display a label with the current progress. Customi
  • 分類:C#、Android、VS2015; 創建日期:2016-02-11 一、簡介 TableLayout也是用行和列劃分單元格,但不會顯示Row、Column以及Cell的邊框線,其子元素有許多TableRow組成,每個TableRow定義表的一行(Row),每個Row擁有0個或多個單元格(Ce
  • 概念介紹 使用aspose生成word報表步驟: 載入word模板 提供數據源 填充 載入模板 提供了4種重載方法 ? 1 2 3 4 5 public Document(); public Document(Stream stream); public Document(string fileNa
  • 其中功能如下(附上一些參考截圖): 1.支持多個文件同時上傳。對文件批量操作 2.支持大文件上傳(文件大小上限為 500M)。 3.實時顯示上傳的進度:上傳百分比,上傳速度,上傳時間,剩餘時間等。 4.一次只能同時上傳5個文件,完成後自動上傳 隊列里的 等待文件。 5.把 已完成、正在上傳、以刪除
  • 出處:http://www.cnblogs.com/wintersun/ Memcached是開源高性能分散式緩存組件,目前已經廣泛應用各類互聯網領域. 具有多種語言的客戶端開發包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/MySQL. 這此站點已經在使用YouTube,R
  • (1).Net .Net指.Net平臺或者是.Net Framework框架。 如果你把.Net平臺想象成一個廚房,那麼.Net Framework框架就是其中的柴米油鹽醬醋茶。 如果你把.Net平臺想象成中國移動,那麼.Net Framework框架就是中國移動的信號塔。 所以說,.Net Fra
  • 分類:C#、Android、VS2015; 創建日期:2016-02-09 修改日期:2016-02-13 一、在AssemblyInfo.cs文件中配置應用程式清單 前面的章節我們說過,除了在AndroidManifest.xml文件中配置應用程式清單外,還可以在AssemblyInfo.cs文件...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...