http://download.chinaunix.net/download.php?id=55&ResourceID=30
tar zxvfsamba-3.0.22.tar.gz解压源文件包执行相关的编译安装
系统默认的安装路径是/usr/local/samba
安装完成后,我们需要配置动态链接库路径,因为运行samba的进行smbd和nmbd需要到目录/usr/local/samba/lib下的动态链接库文件。但是该目录不是系统默认的动态链接库文件搜索路径,于是我们需要将该目录添加到文件ld.so.conf中。执行下面的命令
vi /etc/ld.so.conf
然后执行命令ldconfig
创建共享目录 /data/server/smb 执行授权服务
chmod 755 /data && chmod 755 /data/server && chmod 755 /data/server/smb
samba在运行过程中需要用到配置文件smb.conf。smb.conf配置文件是samba最重要的配置文件,该文件定义了samba的安全机制、文件共享和打印共享的目录和参数以及其他一些系统配置功能。
配置文件smb.conf的默认路径是/usr/local/samba/lib/smb.conf
[global]
workgroup = STAFF
server string = Samba Server %v
security = user
log file = /var/log/samba/%m.log
passdb backend = smbpasswd
[bbp]
path = /data/server/smb
valid users = smbHanson
write list = smbHanson
writeable = yes
配置smb.conf文件后,在开始运行samba的服务进程之前。我们需要先做一些准备工作。运行smbpasswd命令(在目录/usr/local/samba/bin下)
samba共享服务的主要配置文件是使用的/etc/samba/smb.conf这个目录下的文件,具体内容如下
添加smb用户 useradd -s /sbin/nologin smbHanson
修改smb用户 smbpasswd –a smbHanson
关闭防火墙以免阻止访问,执行启动命令进行本机测试
下面使用Windows测试smb是否能够正常的共享呢
最后再次提醒一下,smb.conf文件存在在/etc/samba 、/usr/local/samba/lib目录下 两个目录必须同时存在这个smb.conf文件
[global]
workgroup = STAFF
server string = Samba Server Version %v
passdb backend = smbpasswd
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
[bbpsmb]
path = /data/server/smb
valid users = smbHanson
write list = smbHanson
writeable= yes
browsable =yes
public = yes
guestok = yes
连接密码设置的时候我是设置的smb123好记
具体相关参数定义可访问:www.cnblogs.com/mchina/archive/2012/12/18/2816717.html
使用java代码测试samba服务能否正常上传
package com.cn.smb;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;
public class SmbUtil {
private static SmbFile smbFile = null;//Singleton
private SmbFileOutputStream smbOut = null;
private String url ;
private String code_temp = "";
public SmbUtil(String url,String code){
this.url = url ;
code_temp = code;
init(code);
}
/**
* 初始化链接
* @param code
*/
public void init(String code) {
try {
System.out.println("开始连接...url:" + url + "/" + code);
if (smbFile == null) {
smbFile = new SmbFile(url + "/" + code);
code_temp = code;
smbFile.connect();
}
System.out.println("连接成功...url:" + url + "/" + code);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 文件上传
* @param inputStream
* @param imageName
* @return
*/
public boolean uploadFileByStream (InputStream inputStream,String imageName) {
long start = System.currentTimeMillis();
boolean flag = true ;
BufferedInputStream bf = null;
try {
System.out.println("---> "+url +"/"+code_temp+ "/");
this.smbOut = new SmbFileOutputStream(url +"/"+code_temp+ "/" + imageName, false);
bf = new BufferedInputStream(inputStream);
byte[] bt = new byte[8192];
int n = bf.read(bt);
while (n != -1) {
this.smbOut.write(bt, 0, n);
this.smbOut.flush();
n = bf.read(bt);
}
System.out.println("文件传输结束... 文件传输耗时:"+(System.currentTimeMillis()-start));
} catch (IOException e) {
e.printStackTrace();
flag = false ;
} finally {
try {
if (null != this.smbOut)
this.smbOut.close();
if (null != bf)
bf.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return flag;
}
}
单元测试:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import com.cn.smb.SmbUtil;
public class TestSmb {
public static void main(String[] args) throws FileNotFoundException {
SmbUtil smbUtil = new SmbUtil("smb://smbHanson:smb123@192.168.40.167","bbp");
File imageFile = new File("E:\\adog.jpg");
InputStream inputStream = new FileInputStream("E:\\adog.jpg");
smbUtil.uploadFileByStream(inputStream, "adog.jpg");
}
}