java 上传文件用什么 java实现多文件上传
大家好,今天来为大家解答java 上传文件用什么这个问题的一些问题点,包括java实现多文件上传也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
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服务用户名和密码即可。
JAVA WEB文件上传步骤
JAVA WEB文件上传步骤如下:
实现 Web开发中的文件上传功能,两个操作:在 Web页面添加上传输入项,在 Servlet中读取上传文件的数据并保存在本地硬盘中。
1、Web端上传文件。在 Web页面中添加上传输入项:<input type="file">设置文件上传输入项时应注意:(1)必须设置 input输入项的 name属性,否则浏览器将不会发送上传文件的数据。(2)必须把 form的 enctype属性设为 multipart/form-data,设置该值后,浏览器在上传文件时,将把文件数据附带在 http请求消息体中,并使用 MIME协议对上传文件进行描述,以方便接收方对上传数据进行解析和处理。(3)表单提交的方式要是 post
2、服务器端获取文件。如果提交表单的类型为 multipart/form-data时,就不能采用传统方式获取数据。因为当表单类型为 multipart/form-data时,浏览器会将数据以 MIME协议的形式进行描述。如果想在服务器端获取数据,那么我们必须采用获取请求消息输入流的方式来获取数据。
3、Apache-Commons-fileupload。为了方便用户处理上传数据,Apache提供了一个用来处理表单文件上传的开源组建。使用 Commons-fileupload需要 Commons-io包的支持。
4、fileuplpad组建工作流程
(1)客户端将数据封装在 request对象中。
(2)服务器端获取到 request对象。
(3)创建解析器工厂 DiskFileItemFactory。
(4)创建解析器,将解析器工厂放入解析器构造函数中。之后解析器会对 request进行解析。
(5)解析器会将每个表单项封装为各自对应的 FileItem。
(6)判断代表每个表单项的 FileItem是否为普通表单项 isFormField,返回 true为普通表单项。
(7)如果是普通表单项,通过 getFieldName获取表单项名,getString获得表单项值。
(8)如果 isFormField返回 false那么是用户要上传的数据,可以通过 getInputStream获取上传文件的数据。通过getName可以获取上传的文件名。
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);
}
}
}
}
备注:只需要修改上传的服务器地址、用户名、密码即可进行服务器访问上传。根据实际需要修改即可。
如果你还想了解更多这方面的信息,记得收藏关注本站。