「java文件上传实例」java文件上传功能

博主:adminadmin 2022-12-26 17:00:09 67

本篇文章给大家谈谈java文件上传实例,以及java文件上传功能对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

怎么用Java实现FTP上传

sun.net..,该类库主要提供了用于建立FTP连接的类。利用这些类的方法,编程人员可以远程登录到FTP服务器,列举该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵盖了几乎所有FTP的功能,FtpClient的实例变量保存了有关建立"代理"的各种信息。下面给出了这些实例变量:

public static boolean useFtpProxy

这个变量用于表明FTP传输过程中是否使用了一个代理,因此,它实际上是一个标记,此标记若为TRUE,表明使用了一个代理主机。

public static String ftpProxyHost

此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机名。

public static int ftpProxyPort此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机的端口地址。

FtpClient有三种不同形式的构造函数,如下所示:

1、public FtpClient(String hostname,int port)

 此构造函数利用给出的主机名和端口号建立一条FTP连接。

2、public FtpClient(String hostname)

此构造函数利用给出的主机名建立一条FTP连接,使用默认端口号。

3、FtpClient()

此构造函数将创建一FtpClient类,但不建立FTP连接。这时,FTP连接可以用openServer方法建立。

一旦建立了类FtpClient,就可以用这个类的方法来打开与FTP服务器的连接。类ftpClient提供了如下两个可用于打开与FTP服务器之间的连接的方法。

public void openServer(String hostname)

这个方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。

public void openServer(String host,int port)

这个方法用于建立一条与指定主机、指定端口上的FTP服务器的连接。

打开连接之后,接下来的工作是注册到FTP服务器。这时需要利用下面的方法。

public void login(String username,String password)

此方法利用参数username和password登录到FTP服务器。使用过Intemet的用户应该知道,匿名FTP服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址。

下面是FtpClient类所提供的一些控制命令。

public void cd(String remoteDirectory):该命令用于把远程系统上的目录切换到参数remoteDirectory所指定的目录。

public void cdUp():该命令用于把远程系统上的目录切换到上一级目录。

public String pwd():该命令可显示远程系统上的目录状态。

public void binary():该命令可把传输格式设置为二进制格式。

public void ascii():该命令可把传输协议设置为ASCII码格式。

public void rename(String string,String string1):该命令可对远程系统上的目录或者文件进行重命名操作。

除了上述方法外,类FtpClient还提供了可用于传递并检索目录清单和文件的若干方法。这些方法返回的是可供读或写的输入、输出流。下面是其中一些主要的方法。

public TelnetInputStream list()

返回与远程机器上当前目录相对应的输入流。

public TelnetInputStream get(String filename)

获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。

public TelnetOutputStream put(String filename)

以写方式打开一输出流,通过这一输出流把文件filename传送到远程计算机

package myUtil;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.StringTokenizer;

import sun.net.TelnetInputStream;

import sun.net.TelnetOutputStream;

import sun.net.;

/**

* ftp上传,下载

*

* @author why 2009-07-30

*

*/

public class FtpUtil {

private String ip = "";

private String username = "";

private String password = "";

private int port = -1;

private String path = "";

FtpClient ftpClient = null;

OutputStream os = null;

FileInputStream is = null;

public FtpUtil(String serverIP, String username, String password) {

this.ip = serverIP;

this.username = username;

this.password = password;

}

public FtpUtil(String serverIP, int port, String username, String password) {

this.ip = serverIP;

this.username = username;

this.password = password;

this.port = port;

}

/**

* 连接ftp服务器

*

* @throws IOException

*/

public boolean connectServer() {

ftpClient = new FtpClient();

try {

if (this.port != -1) {

ftpClient.openServer(this.ip, this.port);

} else {

ftpClient.openServer(this.ip);

}

ftpClient.login(this.username, this.password);

if (this.path.length() != 0) {

ftpClient.cd(this.path);// path是ftp服务下主目录的子目录

}

ftpClient.binary();// 用2进制上传、下载

System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录");

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 断开与ftp服务器连接

*

* @throws IOException

*/

public boolean closeServer() {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

if (ftpClient != null) {

ftpClient.closeServer();

}

System.out.println("已从服务器断开");

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 检查文件夹在当前目录下是否存在

*

* @param dir

*@return

*/

private boolean isDirExist(String dir) {

String pwd = "";

try {

pwd = ftpClient.pwd();

ftpClient.cd(dir);

ftpClient.cd(pwd);

} catch (Exception e) {

return false;

}

return true;

}

/**

* 在当前目录下创建文件夹

*

* @param dir

* @return

* @throws Exception

*/

private boolean createDir(String dir) {

try {

ftpClient.ascii();

StringTokenizer s = new StringTokenizer(dir, "/"); // sign

s.countTokens();

String pathName = ftpClient.pwd();

while (s.hasMoreElements()) {

pathName = pathName + "/" + (String) s.nextElement();

try {

ftpClient.sendServer("MKD " + pathName + "\r\n");

} catch (Exception e) {

e = null;

return false;

}

ftpClient.readServerResponse();

}

ftpClient.binary();

return true;

} catch (IOException e1) {

e1.printStackTrace();

return false;

}

}

/**

* ftp上传 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换

*

* @param filename

* 要上传的文件(或文件夹)名

* @return

* @throws Exception

*/

public boolean upload(String filename) {

String newname = "";

if (filename.indexOf("/") -1) {

newname = filename.substring(filename.lastIndexOf("/") + 1);

} else {

newname = filename;

}

return upload(filename, newname);

}

/**

* ftp上传 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换

*

* @param fileName

* 要上传的文件(或文件夹)名

* @param newName

* 服务器段要生成的文件(或文件夹)名

* @return

*/

public boolean upload(String fileName, String newName) {

try {

String savefilename = new String(fileName.getBytes("GBK"),

"GBK");

File file_in = new File(savefilename);// 打开本地待长传的文件

if (!file_in.exists()) {

throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");

}

if (file_in.isDirectory()) {

upload(file_in.getPath(), newName, ftpClient.pwd());

} else {

uploadFile(file_in.getPath(), newName);

}

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

return true;

} catch (Exception e) {

e.printStackTrace();

System.err.println("Exception e in Ftp upload(): " + e.toString());

return false;

} finally {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 真正用于上传的方法

*

* @param fileName

* @param newName

* @param path

* @throws Exception

*/

private void upload(String fileName, String newName, String path)

throws Exception {

String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");

File file_in = new File(savefilename);// 打开本地待长传的文件

if (!file_in.exists()) {

throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");

}

if (file_in.isDirectory()) {

if (!isDirExist(newName)) {

createDir(newName);

}

ftpClient.cd(newName);

File sourceFile[] = file_in.listFiles();

for (int i = 0; i sourceFile.length; i++) {

if (!sourceFile[i].exists()) {

continue;

}

if (sourceFile[i].isDirectory()) {

this.upload(sourceFile[i].getPath(), sourceFile[i]

.getName(), path + "/" + newName);

} else {

this.uploadFile(sourceFile[i].getPath(), sourceFile[i]

.getName());

}

}

} else {

uploadFile(file_in.getPath(), newName);

}

ftpClient.cd(path);

}

/**

* upload 上传文件

*

* @param filename

* 要上传的文件名

* @param newname

* 上传后的新文件名

* @return -1 文件不存在 =0 成功上传,返回文件的大小

* @throws Exception

*/

public long uploadFile(String filename, String newname) throws Exception {

long result = 0;

TelnetOutputStream os = null;

FileInputStream is = null;

try {

java.io.File file_in = new java.io.File(filename);

if (!file_in.exists())

return -1;

os = ftpClient.put(newname);

result = file_in.length();

is = new FileInputStream(file_in);

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

}

} finally {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

}

return result;

}

/**

* 从ftp下载文件到本地

*

* @param filename

* 服务器上的文件名

* @param newfilename

* 本地生成的文件名

* @return

* @throws Exception

*/

public long downloadFile(String filename, String newfilename) {

long result = 0;

TelnetInputStream is = null;

FileOutputStream os = null;

try {

is = ftpClient.get(filename);

java.io.File outfile = new java.io.File(newfilename);

os = new FileOutputStream(outfile);

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

result = result + c;

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return result;

}

/**

* 取得相对于当前连接目录的某个目录下所有文件列表

*

* @param path

* @return

*/

public List getFileList(String path) {

List list = new ArrayList();

DataInputStream dis;

try {

dis = new DataInputStream(ftpClient.nameList(this.path + path));

String filename = "";

while ((filename = dis.readLine()) != null) {

list.add(filename);

}

} catch (IOException e) {

e.printStackTrace();

}

return list;

}

public static void main(String[] args) {

FtpUtil ftp = new FtpUtil("192.168.11.11", "111", "1111");

;

boolean result = ("C:/Documents and Settings/ipanel/桌面/java/Hibernate_HQL.docx", "amuse/audioTest/music/Hibernate_HQL.docx");

System.out.println(result ? "上传成功!" : "上传失败!");

;

/**

* FTP远程命令列表 USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT PASS PASV STOR

* REST CWD STAT RMD XCUP OPTS ACCT TYPE APPE RNFR XCWD HELP XRMD STOU

* AUTH REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ QUIT MODE SYST ABOR

* NLST MKD XPWD MDTM PROT

* 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n

* ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令

* ftpclient.readServerResponse一定要在sendServer后调用

* nameList("/test")获取指目录下的文件列表 XMKD建立目录,当目录存在的情况下再次创建目录时报错 XRMD删除目录

* DELE删除文件

*/

}

}

java如何实现文件上传

public static int transFile(InputStream in, OutputStream out, int fileSize) {

int receiveLen = 0;

final int bufSize = 1000;

try {

byte[] buf = new byte[bufSize];

int len = 0;

while(fileSize - receiveLen bufSize)

{

len = in.read(buf);

out.write(buf, 0, len);

out.flush();

receiveLen += len;

System.out.println(len);

}

while(receiveLen fileSize)

{

len = in.read(buf, 0, fileSize - receiveLen);

System.out.println(len);

out.write(buf, 0, len);

receiveLen += len;

out.flush();

}

} catch (IOException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

return receiveLen;

}

这个方法从InputStream中读取内容,写到OutputStream中。

那么发送文件方,InputStream就是FileInputStream,OutputStream就是Socket.getOutputStream.

接受文件方,InputStream就是Socket.getInputStream,OutputStream就是FileOutputStream。

就OK了。 至于存到数据库里嘛,Oracle里用Blob。搜索一下,也是一样的。从Blob能获取一个输出流。

谁能说说java批量上传文件的原理,并且给个例子吧 谢了

刚学完多文件上传,希望对你有帮助。

多文件上传,就是把多个文件一起传到指定的位置,他和单文件上传类似,只需要改动几个地方而已即可。首先是上传页面,由于要上传多个文件,所以就必须有多个供用户选择的文件框,然后修改Action,把action中属性的类型修改为list。

action如下:

public class UploadActionMany extends ActionSupport{

private ListFile upload;

private ListString uploadFileName;

public String execute() throws Exception {

// TODO Auto-generated method stub

System.out.print(upload.size());

if(upload!=null){

for (int i = 0; i upload.size(); i++) {

InputStream is=new FileInputStream(upload.get(i)); OutputStream os=new FileOutputStream("d:\\upload\\"+getUploadFileName().get(i)); byte buffer[]=new byte[1024];

int count=0;

while((count=is.read(buffer))0){

os.write(buffer,0,count);

}

os.close();

is.close();

}

}

return SUCCESS;

}

省略set和get方法

jsp如下:

html

head

title文件上传/title

/head

body

s:form action="upload.action" method="post" enctype="multipart/form-data" s:file name="upload" label="上传的文件一"/s:file

s:file name="upload" label="上传的文件二"/s:file

s:file name="upload" label="上传的文件三"/s:file

s:submit value="上传"/s:submit

/s:form

/body

/html

希望对你有帮助,打代码不容易啊,记得给点分

java怎么用commons-fileupload实现上传文件

文件上传步骤:

     1. 导入jar包

          common-fileupload.jar

          common-io.jar      

     2. 上传jsp页面编辑

         body

            form action="${pageContext.request.contextPath}/servlet/UploadHandleServlet" enctype="multipart/form-data" method="post"

                上传用户:input type="text" name="username"br/

                上传文件1:input type="file" name="file1"br/

                上传文件2:input type="file" name="file2"br/

                            input type="submit" value="提交"

            /form

        /body    

     3. 消息提示页面(成功or失败)     

            body

                ${message}

            /body    

     4. 处理文件上传的servlet编写   

         import java.io.File;

         import java.io.FileOutputStream;

         import java.io.IOException;

         import java.io.InputStream;

         import java.util.List;

         import java.util.UUID;

             

             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.FileUploadBase;

             import org.apache.commons.fileupload.ProgressListener;

             import org.apache.commons.fileupload.disk.DiskFileItemFactory;

             import org.apache.commons.fileupload.servlet.ServletFileUpload;

              

             public class UploadHandleServlet extends HttpServlet {

              

              public void doGet(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

                 //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全

                 String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");

                 //上传时生成的临时文件保存目录

                 String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");

                 File tmpFile = new File(tempPath);

                 if (!tmpFile.exists()) {

                  //创建临时目录

                  tmpFile.mkdir();

                 }

                  

                 //消息提示

                 String message = "";

                 try{

                  //使用Apache文件上传组件处理文件上传步骤:

                  //1、创建一个DiskFileItemFactory工厂

                  DiskFileItemFactory factory = new DiskFileItemFactory();

                  //设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中。

                  factory.setSizeThreshold(1024*100);//设置缓冲区的大小为100KB,如果不指定,那么缓冲区的大小默认是10KB

                  //设置上传时生成的临时文件的保存目录

                  factory.setRepository(tmpFile);

                  //2、创建一个文件上传解析器

                  ServletFileUpload upload = new ServletFileUpload(factory);

                  //监听文件上传进度

                  upload.setProgressListener(new ProgressListener(){

                   public void update(long pBytesRead, long pContentLength, int arg2) {

                    System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);

                    /**

                    * 文件大小为:14608,当前已处理:4096

                     文件大小为:14608,当前已处理:7367

                     文件大小为:14608,当前已处理:11419

                     文件大小为:14608,当前已处理:14608

                    */

                   }

                  });

                  //解决上传文件名的中文乱码

                  upload.setHeaderEncoding("UTF-8"); 

                  //3、判断提交上来的数据是否是上传表单的数据

                  if(!ServletFileUpload.isMultipartContent(request)){

                   //按照传统方式获取数据

                   return;

                  }

                   

                  //设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是1MB

                  upload.setFileSizeMax(1024*1024);

                  //设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为10MB

                  upload.setSizeMax(1024*1024*10);

                  //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个ListFileItem集合,每一个FileItem对应一个Form表单的输入项

                  ListFileItem list = upload.parseRequest(request);

                  for(FileItem item : list){

                   //如果fileitem中封装的是普通输入项的数据

                   if(item.isFormField()){

                    String name = item.getFieldName();

                    //解决普通输入项的数据的中文乱码问题

                    String value = item.getString("UTF-8");

                    //value = new String(value.getBytes("iso8859-1"),"UTF-8");

                    System.out.println(name + "=" + value);

                   }else{//如果fileitem中封装的是上传文件

                    //得到上传的文件名称,

                    String filename = item.getName();

                    System.out.println(filename);

                    if(filename==null || filename.trim().equals("")){

                     continue;

                    }

                    //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt

                    //处理获取到的上传文件的文件名的路径部分,只保留文件名部分

                    filename = filename.substring(filename.lastIndexOf("\\")+1);

                    //得到上传文件的扩展名

                    String fileExtName = filename.substring(filename.lastIndexOf(".")+1);

                    //如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法

                    System.out.println("上传的文件的扩展名是:"+fileExtName);

                    //获取item中的上传文件的输入流

                    InputStream in = item.getInputStream();

                    //得到文件保存的名称

                    String saveFilename = makeFileName(filename);

                    //得到文件的保存目录

                    String realSavePath = makePath(saveFilename, savePath);

                    //创建一个文件输出流

                    FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename);

                   //创建一个缓冲区

                    byte buffer[] = new byte[1024];

                    //判断输入流中的数据是否已经读完的标识        int len = 0;

                    //循环将输入流读入到缓冲区当中,(len=in.read(buffer))0就表示in里面还有数据

                    while((len=in.read(buffer))0){

                     //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中

                     out.write(buffer, 0, len);

                    }

                    //关闭输入流

                    in.close();

                    //关闭输出流

                    out.close();        //删除处理文件上传时生成的临时文件        //item.delete();        message = "文件上传成功!";

                   }

                  }

                 }catch (FileUploadBase.FileSizeLimitExceededException e) {

                  e.printStackTrace();

                  request.setAttribute("message", "单个文件超出最大值!!!");

                  request.getRequestDispatcher("/message.jsp").forward(request, response);

                  return;

                 }catch (FileUploadBase.SizeLimitExceededException e) {

                  e.printStackTrace();

                  request.setAttribute("message", "上传文件的总的大小超出限制的最大值!!!");

                  request.getRequestDispatcher("/message.jsp").forward(request, response);

                  return;

                 }catch (Exception e) {

                  message= "文件上传失败!";

                  e.printStackTrace();

                 }

                 request.setAttribute("message",message);

                 request.getRequestDispatcher("/message.jsp").forward(request, response);

              }

              private String makeFileName(String filename){ //2.jpg

               //为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名

               return UUID.randomUUID().toString() + "_" + filename;

              }  

             private String makePath(String filename,String savePath){

               //得到文件名的hashCode的值,得到的就是filename这个字符串对象在内存中的地址

               int hashcode = filename.hashCode();

               int dir1 = hashcode0xf; //0--15

               int dir2 = (hashcode0xf0)4; //0-15

               //构造新的保存目录

               String dir = savePath + "\\" + dir1 + "\\" + dir2; //upload\2\3 upload\3\5

               if(!file.exists()){

                file.mkdirs();

              }

               return dir;

              }

              

              public void doPost(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

               doGet(request, response);

              }

             }

     5.编写web.xml文件(servlet的映射配置)   

            servlet

                servlet-nameUploadHandleServlet/servlet-name

                servlet-classme.gacl.web.controller.UploadHandleServlet/servlet-class

            /servlet

             

            servlet-mapping

                servlet-nameUploadHandleServlet/servlet-name

                url-pattern/servlet/UploadHandleServlet/url-pattern

            /servlet-mapping

 

 

 注: 网上看到的,出处找不到了,望见谅!!

java文件上传实例的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java文件上传功能、java文件上传实例的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。