首页编程java编程java上传文件用什么 java上传文件怎么实现的

java上传文件用什么 java上传文件怎么实现的

编程之家2023-10-1286次浏览

本篇文章给大家谈谈java上传文件用什么,以及java上传文件怎么实现的对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

java上传文件用什么 java上传文件怎么实现的

java上传文件怎么实现的

common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件

下面先介绍上传文件到服务器(多文件上传):

import javax.servlet.*;

java上传文件用什么 java上传文件怎么实现的

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

java上传文件用什么 java上传文件怎么实现的

import java.util.regex.*;

import org.apache.commons.fileupload.*;

public class upload extends HttpServlet{

private static final String CONTENT_TYPE="text/html; charset=GB2312";

//Process the HTTP Post request

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

response.setContentType(CONTENT_TYPE);

PrintWriter out=response.getWriter();

try{

DiskFileUpload fu= new DiskFileUpload();

//设置允许用户上传文件大小,单位:字节,这里设为2m

fu.setSizeMax(2*1024*1024);

//设置最多只允许在内存中存储的数据,单位:字节

fu.setSizeThreshold(4096);

//设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

fu.setRepositoryPath("c://windows//temp");

//开始读取上传信息

List fileItems= fu.parseRequest(request);

//依次处理每个上传的文件

Iterator iter= fileItems.iterator();

//正则匹配,过滤路径取文件名

String regExp=".+////(.+)$";

//过滤掉的文件类型

String[] errorType={".exe",".com",".cgi",".asp"};

Pattern p= Pattern.compile(regExp);

while(iter.hasNext()){

FileItem item=(FileItem)iter.next();

//忽略其他不是文件域的所有表单信息

if(!item.isFormField()){

String name= item.getName();

long size= item.getSize();

if((name==null||name.equals(""))&& size==0)

continue;

Matcher m= p.matcher(name);

boolean result= m.find();

if(result){

for(int temp=0;temp<ERRORTYPE.LENGTH;TEMP++){

if(m.group(1).endsWith(errorType[temp])){

throw new IOException(name+": wrong type");

}

}

try{

//保存上传的文件到指定的目录

//在下文中上传文件至数据库时,将对这里改写

item.write(new File("d://"+ m.group(1)));

out.print(name+""+size+"");

}

catch(Exception e){

out.println(e);

}

}

else

{

throw new IOException("fail to upload");

}

}

}

}

catch(IOException e){

out.println(e);

}

catch(FileUploadException e){

out.println(e);

}

}

}

现在介绍上传文件到服务器,下面只写出相关代码:

以sql2000为例,表结构如下:

字段名:name filecode

类型: varchar image

数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");

代码如下:

。。。。。。

try{

这段代码如果不去掉,将一同写入到服务器中

//item.write(new File("d://"+ m.group(1)));

int byteread=0;

//读取输入流,也就是上传的文件内容

InputStream inStream=item.getInputStream();

pstmt.setString(1,m.group(1));

pstmt.setBinaryStream(2,inStream,(int)size);

pstmt.executeUpdate();

inStream.close();

out.println(name+""+size+"");

}

。。。。。。

这样就实现了上传文件至数据库

java实现多文件上传

即使再多文件也是通过的单个文件逐次上传的(zip等压缩包实际上是一个文件)。实现思路就是将多个文件循环进行上传,上传方法举例:

/**

*上传文件

*

*@param fileName

*@param plainFilePath文件路径路径

*@param filepath

*@return

*@throws Exception

*/

public static String fileUploadByFtp(String plainFilePath, String fileName, String filepath) throws Exception{

FileInputStream fis= null;

ByteArrayOutputStream bos= null;

FTPClient ftpClient= new FTPClient();

String bl="false";

try{

fis= new FileInputStream(plainFilePath);

bos= new ByteArrayOutputStream(fis.available());

byte[] buffer= new byte[1024];

int count= 0;

while((count= fis.read(buffer))!=-1){

bos.write(buffer, 0, count);

}

bos.flush();

Log.info("加密上传文件开始");

Log.info("连接远程上传服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);

ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);

ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);

FTPFile[] fs;

fs= ftpClient.listFiles();

for(FTPFile ff: fs){

if(ff.getName().equals(filepath)){

bl="true";

ftpClient.changeWorkingDirectory("/"+filepath+"");

}

}

Log.info("检查文件路径是否存在:/"+filepath);

if("false".equals(bl)){

ViewUtil.dataSEErrorPerformedCommon("查询文件路径不存在:"+"/"+filepath);

return bl;

}

ftpClient.setBufferSize(1024);

ftpClient.setControlEncoding("GBK");

//设置文件类型(二进制)

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

ftpClient.storeFile(fileName, fis);

Log.info("上传文件成功:"+fileName+"。文件保存路径:"+"/"+filepath+"/");

return bl;

} catch(Exception e){

throw e;

} finally{

if(fis!= null){

try{

fis.close();

} catch(Exception e){

Log.info(e.getLocalizedMessage(), e);

}

}

if(bos!= null){

try{

bos.close();

} catch(Exception e){

Log.info(e.getLocalizedMessage(), e);

}

}

}

}

备注:只需要修改上传的服务器地址、用户名、密码即可进行服务器访问上传。根据实际需要修改即可。

java web 大文件上传下载

直接把大文件读取为IO流,之后进行上传下载即可,不用担心文件大,是可以分流下载上传的(setBufferSize(1024))。

举例:

import hkrt.b2b.view.util.Log;

import hkrt.b2b.view.util.ViewUtil;

import java.io.ByteArrayOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

public class CCFCCBFTP{

/**

*上传文件

*

*@param fileName

*@param plainFilePath明文文件路径路径

*@param filepath

*@return

*@throws Exception

*/

public static String fileUploadByFtp(String plainFilePath, String fileName, String filepath) throws Exception{

FileInputStream fis= null;

ByteArrayOutputStream bos= null;

FTPClient ftpClient= new FTPClient();

String bl="false";

try{

fis= new FileInputStream(plainFilePath);

bos= new ByteArrayOutputStream(fis.available());

byte[] buffer= new byte[1024];

int count= 0;

while((count= fis.read(buffer))!=-1){

bos.write(buffer, 0, count);

}

bos.flush();

Log.info("加密上传文件开始");

Log.info("连接远程上传服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);

ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);

ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);

FTPFile[] fs;

fs= ftpClient.listFiles();

for(FTPFile ff: fs){

if(ff.getName().equals(filepath)){

bl="true";

ftpClient.changeWorkingDirectory("/"+filepath+"");

}

}

Log.info("检查文件路径是否存在:/"+filepath);

if("false".equals(bl)){

ViewUtil.dataSEErrorPerformedCommon("查询文件路径不存在:"+"/"+filepath);

return bl;

}

ftpClient.setBufferSize(1024);

ftpClient.setControlEncoding("GBK");

//设置文件类型(二进制)

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

ftpClient.storeFile(fileName, fis);

Log.info("上传文件成功:"+fileName+"。文件保存路径:"+"/"+filepath+"/");

return bl;

} catch(Exception e){

throw e;

} finally{

if(fis!= null){

try{

fis.close();

} catch(Exception e){

Log.info(e.getLocalizedMessage(), e);

}

}

if(bos!= null){

try{

bos.close();

} catch(Exception e){

Log.info(e.getLocalizedMessage(), e);

}

}

}

}

/**

*下载文件

*

*@param localFilePath

*@param fileName

*@param routeFilepath

*@return

*@throws Exception

*/

public static String fileDownloadByFtp(String localFilePath, String fileName,String routeFilepath) throws Exception{

FileInputStream fis= null;

ByteArrayOutputStream bos= null;

FileOutputStream fos= null;

FTPClient ftpClient= new FTPClient();

String SFP= System.getProperty("file.separator");

String bl="false";

try{

Log.info("下载并解密文件开始");

Log.info("连接远程下载服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);

ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);

ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);

// ftpClient.connect(CMBCUtil.CMBCHOSTNAME, 2021);

// ftpClient.login(CMBCUtil.CMBCLOGINNAME, CMBCUtil.CMBCLOGINPASSWORD);

FTPFile[] fs;

ftpClient.makeDirectory(routeFilepath);

ftpClient.changeWorkingDirectory(routeFilepath);

bl="false";

fs= ftpClient.listFiles();

for(FTPFile ff: fs){

if(ff.getName().equals(fileName)){

bl="true";

Log.info("下载文件开始。");

ftpClient.setBufferSize(1024);

//设置文件类型(二进制)

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

InputStream is= ftpClient.retrieveFileStream(fileName);

bos= new ByteArrayOutputStream(is.available());

byte[] buffer= new byte[1024];

int count= 0;

while((count= is.read(buffer))!=-1){

bos.write(buffer, 0, count);

}

bos.flush();

fos= new FileOutputStream(localFilePath+SFP+fileName);

fos.write(bos.toByteArray());

Log.info("下载文件结束:"+localFilePath);

}

}

Log.info("检查文件是否存:"+fileName+""+bl);

if("false".equals(bl)){

ViewUtil.dataSEErrorPerformedCommon("查询无结果,请稍后再查询。");

return bl;

}

return bl;

} catch(Exception e){

throw e;

} finally{

if(fis!= null){

try{

fis.close();

} catch(Exception e){

Log.info(e.getLocalizedMessage(), e);

}

}

if(bos!= null){

try{

bos.close();

} catch(Exception e){

Log.info(e.getLocalizedMessage(), e);

}

}

if(fos!= null){

try{

fos.close();

} catch(Exception e){

Log.info(e.getLocalizedMessage(), e);

}

}

}

}}

备注:以上方法就实现了流的二进制上传下载转换,只需要将服务器连接部分调整为本地的实际ftp服务用户名和密码即可。

OK,本文到此结束,希望对大家有所帮助。

java 为什么 自动拆装箱?java包装类Integer问题kjava费用是什么意思 JAVA是什么意思