Java-常用上传文件及下载文件的方法
第1种:利用request中的part
@MultipartConfig //支持二进制处理
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
String path = "D:/Downloads/upload/"; //存放文件的根目录
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8"); //设置请求编码
//获取传递过来的文件 part代表一个文件
Part file = req.getPart("file");
//获取提交文件的文件名
String fileName = file.getSubmittedFileName();
//获取输入流
InputStream inputStream = file.getInputStream();
//创建一个输出流
FileOutputStream fileOutputStream = new FileOutputStream(path + fileName);
//创建一个byte字节数组
byte[] data = new byte[1024];
int len; //记录长度
while ((len = inputStream.read(data)) != -1){
//对上传文件经行输出
fileOutputStream.write(data,0,len);
}
//关闭资源
inputStream.close();
fileOutputStream.close();
}
}
第2种:利用commons-fileupoad上传文件
下载commons-fileupload.jar,commons-io.jar包
1.0版:
@RequestMapping(value="/testFileUpload")
public String testFileUpload(HttpServletRequest request) throws Exception{
//获得服务器上的 upload目录的绝对路径
String path=request.getSession().getServletContext().getRealPath("/upload/");
//创建一个文件对象
File file=new File(path);
//判断是否有此文件夹
if(!file.exists()){
//创建文件夹
file.mkdirs();
}
//创建一个解析文件对象
DiskFileItemFactory factory=new DiskFileItemFactory();
//将解析对象 放在 文件上传对象中
ServletFileUpload upload=new ServletFileUpload(factory);
//把request对象传入上传对象中进行解析
//因为多个file表单是可以上传多个文件 request分段的 所以存入list中
List<FileItem> items=upload.parseRequest(request);
//开始将文件写入(上传)到服务器的 upload目录中
for(FileItem item:items){
//判断表单是否为file表单类型
if(item.isFormField()){
//如果是普通表单类型 做出处理
}else{
//是file表单类型 得到上传的文件名
String filename=item.getName();
//创建唯一文件名()保证同一个文件的时候不会被覆盖
String uuid=UUID.randomUUID().toString().replace("_", "");
filename=uuid+"_"+filename;
//开始上传
item.write(new File(path,filename));
//清理临时文件
item.delete();
}
}
return "success";
}
2.0版:
@WebServlet("/upload.do")
public class UploadServlet extends HttpServlet {
public static final String UPLOAD_PATH="D:\\upload\\";
/**
* 上传轮播图片
* @param req
* @param resp
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("上传图片uploadImg");
//将解析对象 放在 文件上传对象中
ServletFileUpload upload=new ServletFileUpload();
try {
FileItemIterator itemIterator = upload.getItemIterator(req);
while (itemIterator.hasNext()){
FileItemStream item = itemIterator.next();
if(item.isFormField()){
System.out.println(item.getFieldName());
}else {
String name = item.getName();
//获得随机名字
name=UUID.randomUUID().toString().replace("-","").substring(0,12)+name.substring(name.lastIndexOf("."));
//上传文件
Streams.copy(item.openStream(),new FileOutputStream(UPLOAD_PATH+name),true);
//响应json格式数据到前台 layui接口规定
resp.getWriter().write(RESPONSE.replace("XXX",name));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
第3种:springmvc中的上传
@Controller
public class FileUploadController {
//服务器上传路径
String uploadPath="D:\\Downloads\\upload\\";
//上传方法
@RequestMapping("/fileUpload")
public String fileUpload(@RequestParam("name") String name,
@RequestParam("uploadfile") List<MultipartFile> uploadfile,
HttpServletRequest request) {
/*项目路径下文件夹
String uploadPath=request.getServletContext().getRealPath("/upload/");*/
//上传路径文件对象
File filePath=new File(uploadPath);
if(!filePath.exists()){
filePath.mkdirs();
}
//上传文件
if(uploadfile!=null && !uploadfile.isEmpty()){
System.out.println("上传文件个数:"+uploadfile.size());
for(MultipartFile file:uploadfile){
//上传文件名
String saveanme=file.getOriginalFilename();
System.out.println("原始名为:"+saveanme);
//新的上传文件名 (上传人+随机id+上传文件名)
String newFilename=name+"_"+UUID.randomUUID()+"_"+saveanme;
try {
//目标路径 File.separator /
String targetPath=uploadPath+newFilename;
System.out.println("目标文件地址"+targetPath);
//开始上传
file.transferTo(new File(targetPath));
} catch (Exception e) {
e.printStackTrace();
return "error";
}
}
}
return "success";
}
文件下载:
@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
String path = "D:/Downloads/upload/"; //存放文件的根目录
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获得文件名字
String file = req.getParameter("file");
//判断文件是否存在
File f=new File(path + file);
if(!f.exists()){
resp.sendRedirect("index.jsp");
return;
}
//创建一个字节输入流 传入需下载文件路径
FileInputStream is= new FileInputStream(path + file);
//响应对象获得字节输出流
ServletOutputStream os= resp.getOutputStream();
//reps配置,对其文件名进行编码转换
String filename=new String(file.getBytes(),"iso-8859-1");
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition","attachment;filename="+filename);
resp.setContentLength(os.available());
//创建一个byte字节数组
byte[] data = new byte[1024];
int len; //记录长度
while ((len = is.read(data)) != -1){
//对上传文件经行输出
os.write(data,0,len);
}
//关闭资源
is.close();
os.close();
}
}