需要用到的jar包   http://pan.baidu.com/s/1skQFk77

1.首先在一台电脑上设置共享文件夹

----上传下载的方法类

package com.strongit.tool.upload;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream; public class SMB { /**
* 从本地上传文件到共享目录
* @param remoteUrl 共享文件目录
* @param localFilePath 本地文件绝对路径
*/ public static void smbPut(String remoteUrl, String localFilePath)
{
InputStream in = null;
OutputStream out = null;
try
{
File localFile = new File(localFilePath); String fileName = localFile.getName();
SmbFile remoteFile = new SmbFile(remoteUrl+"/"+ fileName);
in = new BufferedInputStream(new FileInputStream(localFile));
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
byte[] buffer = new byte[1024];
while (in.read(buffer) != -1)
{
out.write(buffer);
buffer = new byte[1024];
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
out.close();
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
} /**
* 从共享目录拷贝文件到本地
* @param remoteUrl 共享目录上的文件路径
* @param localDir 本地目录
*/
public static void smbGet(String remoteUrl, String localFileStr)
{
InputStream in = null;
OutputStream out = null;
try
{
SmbFile remoteFile = new SmbFile(remoteUrl);
remoteFile.connect();
if (remoteFile == null)
{
// System.out.println("共享文件不存在");
return;
}
String fileName = remoteFile.getName(); localFileStr = localFileStr + fileName; File localFile = new File(localFileStr); if(!localFile.exists())
{
localFile.createNewFile();
} in = new BufferedInputStream(new SmbFileInputStream(remoteFile)); out = new BufferedOutputStream(new FileOutputStream(localFile));
byte[] buffer = new byte[1024];
while (in.read(buffer) != -1)
{
out.write(buffer);
buffer = new byte[1024];
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
out.close();
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
} }

  

2.上传的类


import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; /*
* smb协议
* 上传文件到另一台局域网服务器
* */
public class formservlet extends HttpServlet { //要将文件存储到远程服务器的存储地址
// smb://用户名:密码@地址/共享的目录
private static final String remoteUrl ="smb://administrator:shichengzhe@192.168.2.112/gongxiang"; public String getStr(String str)
{
String s=null ;
if(str!=null)
{
try {
s = new String(str.getBytes("ISO8859-1"),"gb2312");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("转码出现错误");
}
}
return s;
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
//设置合法的后缀名-可以添加需要上传的文件类型
final String[] allowedatt = new String[] {"doc","docx","html","htm","txt","mp4"};
//创建该对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//上传文件所用到的缓冲区大小,超过此缓冲区的部分将被写入到磁盘
factory.setSizeThreshold(4*1024);
//使用fileItemFactory为参数实例化一个ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
//要求上传的form-data数据不超过1000M
upload.setSizeMax(1000*1024*1024);
//java.util.List实例来接收上传的表单数据和文件数据
List itemList;
try {
itemList = upload.parseRequest(request);
//迭代list中的内容
Iterator it = itemList.iterator();
//循环list中的内容
while(it.hasNext())
{
//取出一个表单域
FileItem item =(FileItem) it.next();
//如果不是普通表单,则代表是文件上传的表单
//获取上传文件的名字
String totalNameatt = getStr(item.getName());
//获取文件的后缀名
String suffixatt = totalNameatt.substring(totalNameatt.lastIndexOf(".") + 1);
//判断后缀名是否是我们允许上传的类型
boolean isValide=false;
for(int i=0;i<allowedatt.length;i++)
{
if(suffixatt.equals(allowedatt[i])){
isValide=true;
break;
}
}
//如果是不允许的类型,输出错误信息
if(!isValide)
{
System.out.println(totalNameatt+"该文件类型不在允许上传的范围内");
return ;
}
//如果是合法的,就保存该文件,文件名不变
else
{
//获取项目根目录
String rootPath = this.getServletConfig().getServletContext().getRealPath("/");
//要存储的文件的绝对路径
String filestr = rootPath +System.currentTimeMillis()+"."+suffixatt;
File file = new File(filestr);
//获取选择上传文件的 存放到项目里面
item.write(file);
//上传到服务器
saveRemote(filestr);
//删除存放在目录里的上传文件
file.delete();
} } } catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} }
/*
* localFilePath 本地文件地址
* */
public void saveRemote(String localFilePath)
{ SMB.smbPut(remoteUrl, localFilePath);
} }

  

3.下载文件类

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ReadServlet extends HttpServlet { private static final String remoteUrl ="smb://administrator:shichengzhe@192.168.2.112/gongxiang"; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取要获得的文件名
String filename = request.getParameter("filename");
//拼凑要下载文件的绝对路径
String fileUrl = remoteUrl + "/" + filename;
//拼凑本地路径
String root =this.getServletConfig().getServletContext().getRealPath("/");
String localUrl = root+System.getProperty("file.separator")+filename;
SMB.smbGet(fileUrl, localUrl); System.out.println("文件:"+localUrl+"下载成功"); } }

  

4.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
</head> <body>
<form action="servlet/formservlet" method="post" enctype="multipart/form-data" >
<input type="file" id="file" name="file" /><br/>
<input type="submit" value="提交" />
</form> <!-- action? 要从服务器下载的文件 -->
<a href="servlet/ReadServlet?filename=234234.doc">从远程服务器读取文件</a>
</body>
</html>

5.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>formservlet</servlet-name>
<servlet-class>formservlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ReadServlet</servlet-name>
<servlet-class>ReadServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>formservlet</servlet-name>
<url-pattern>/servlet/formservlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ReadServlet</servlet-name>
<url-pattern>/servlet/ReadServlet</url-pattern>
</servlet-mapping> </web-app>

完整的smb文件上传与下载就完成了

基于SMB共享文件夹的上传于下载的更多相关文章

  1. Java实现FTP文件与文件夹的上传和下载

    Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...

  2. koa2基于stream(流)进行文件上传和下载

    阅读目录 一:上传文件(包括单个文件或多个文件上传) 二:下载文件 回到顶部 一:上传文件(包括单个文件或多个文件上传) 在之前一篇文章,我们了解到nodejs中的流的概念,也了解到了使用流的优点,具 ...

  3. JavaScript开发——文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  4. JS开发——文件夹的上传和下载

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  5. Java web开发——文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  6. 基于commons-net实现ftp创建文件夹、上传、下载功能

    原文:http://www.open-open.com/code/view/1420774470187 package com.demo.ftp; import java.io.FileInputSt ...

  7. B/S开发——文件夹的上传和下载

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  8. php web开发——文件夹的上传和下载

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  9. 利用Apache commons-net 包进行FTP文件和文件夹的上传与下载

    首先声明:这段代码是我在网上胡乱找的,调试后可用. 需要提前导入jar包,我导入的是:commons-net-3.0.1,在网上可以下载到.以下为源码,其中文件夹的下载存在问题:FTPFile[] a ...

随机推荐

  1. Oracle- UPDATE FROM讲解

    在表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.像sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通 ...

  2. android侧滑菜单笔记

    一.SlidingPaneLayout v4包下的控件,使用简单,功能简洁.官方文档明确说明该控件只能左侧滑动.使用如下: <android.support.v4.widget.SlidingP ...

  3. Android中的动画学习总结

    android中动画可分为三种:帧动画,补间动画,和属性动画.其中属性动画是google推荐的,它可以实现前面两种动画的效果,运用起来更加灵活. 帧动画:顾名思义,就是一帧一帧的图片,快速播放形成的动 ...

  4. rank() over(partition)的使用

    有的时候会遇到这样的问题,我们需要查询一张表,而且要按照业务排序,比如我需要如下的结果: 地区   日期    费用  产品编号   用户编号 290 201202 258 1             ...

  5. ASP.Net Core-依赖注入IoC

    一.Ioc IoC全称Inverse of Control,控制反转. 类库和框架的不同之处在于,类库是实现某种单一功能的API,框架是针对一个任务把这些单一功能串联起来形成一个完整的流程,这个流程在 ...

  6. 数学之路(3)-机器学习(3)-机器学习算法-SVM[5]

    svm小结 1.超平面 两种颜色的点分别代表两个类别,红颜色的线表示一个可行的超平面.在进行分类的时候,我们将数据点  x 代入  f(x)  中,如果得到的结果小于 0 ,则赋予其类别 -1 ,如果 ...

  7. Ubuntu 安装 Courier New字体

    apt-get install ttf-mscorefonts-installer  它的本质是安装 Courier New字体 安装的时候会出现一个协议 按TAB键 ,可以选中<确定>按 ...

  8. #define和预编译指令

    今天再总结一点#define和预处理指令的使用. 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理. 预处理指令是以#开头的代码行,#后是 ...

  9. [C++]对象的销毁机制

    销毁时会按照从后向前的顺序销毁,也就是说,越在后面定义的对象会越早销毁.其中的原因就是函数是在栈中保存的,因此,先定义的对象先压栈,所以在退栈时就会后销毁.而如果参数有多个的话,大多数编译器是从右开始 ...

  10. java_不知道数据类型情况下,数组遍历-反射

    if(items.getClass().isArray){ this.collection = new ArrayList(); int length = Array.getLength(items) ...