上传和下载文件到服务器

jar: commons-fileupload.jsr组件
commons-io.jar
代码:

前端:

学号
姓名
上传图片

后端servlet:

package com.baidu.servlet;

import java.io.File;
import java.io.IOException;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


/**
 * Servlet implementation class fileuploadService
 */
public class fileuploadService extends HttpServlet {


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("hello");
		request.setCharacterEncoding("utf-8");
			response.setCharacterEncoding("utf-8");
			response.setContentType("text/html; charset=UTF-8");
			boolean ismultipart=ServletFileUpload.isMultipartContent(request);
			String name;String sid;
			if(ismultipart){
				FileItemFactory fileItemFactory=new DiskFileItemFactory();
				//获取上传文件对象
				ServletFileUpload upload=new ServletFileUpload(fileItemFactory);
				try {
					//解析上传文件对象,得到fileitem列表
				List<FileItem>list=	upload.parseRequest(request);
				//遍历list
				Iterator<FileItem>itor=list.iterator();
				while(itor.hasNext()){
					FileItem item=itor.next();
					String itemname=item.getFieldName();
					//判断是否为表单字段(sid,sname)true是表单字段,false为文件
					if(item.isFormField()){
						
						if(itemname.equals("sid")){
							 sid=item.getString("utf-8");
							
						}else if(itemname.equals("sname")){
							name=item.getString("utf-8");
							
						}else{
							System.out.println("其他字段");
						}	
					}else{
						//获取的是文件
						//获取文件名
						String filename=item.getName();
						//通过得到ServletContext获取文件地址
						String path= request.getSession().getServletContext().getRealPath("upload");
						File file=new File(path,filename);
						try {
							item.write(file);
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
					
					
				}
				} catch (FileUploadException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
	
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

注意
上传的目录 upload:
如果修改代码,则在tomcat重新启动时会被删除
原因:当修改代码时,tomcat会重新编译一份,class并且重新部署(重新创建各种目录)
如果不修改代码,则不会删除,
原因:没有修改代码,class还是原来的class。
解决办法:修改路径或配置虚拟路径

从服务器下载文件
前端代码
下载
后端servlet:

package com.baidu.servlet;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class filedownload
 */
public class filedownload extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//下载文件
		
	String filename=request.getParameter("filename");
	
		//下载文件,需要设置消息头
	response.addHeader("content-Type","application/octet-stream" );
	response.addHeader("content-Disposition", "attachement;filename="+filename);//filename包含文件后缀
	//servlet通过文件的地址将文件转为输入流
	InputStream is=getServletContext().getResourceAsStream("/ppp.jpg");// 图片相对路径
	
	// 通过输出流响应给客户端
	ServletOutputStream out=response.getOutputStream();
	byte[] bs=new byte[10];
	int len=-1;
	while((len=(is.read(bs))  )!=-1){
		out.write(bs,0,len);
	}
	out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

总结:
文件下载不需要刚才上面的两个jar包,可以直接用输入流和输出流就可以了。

发布了7 篇原创文章 · 获赞 4 · 访问量 182

猜你喜欢

转载自blog.csdn.net/weixin_45558236/article/details/105012139
今日推荐