jsp上传图片(记录)

在做大作业时遇到了需要上传图片的场景,把使用方法记录下来。首先准备工作,使用servlet作为后台处理需要的jar包有commons-fileupload-1.3.2、commons-io-2.5.jar,可以去我的网盘下载https://pan.baidu.com/s/12SUmVJo3nDCNucTSQFlTSw

需要的js文件,jquery和ajaxfileupload.js,链接--->https://pan.baidu.com/s/1UcBcuYl06UGabFoZfAx89g

jsp页面当中,只写了一个带有文件选择的表单,可以调用文件资源管理选择文件即可。js部分的代码使用了ajaxFileUpload提供的方法,将处理的servlet路径,文件格式写明,表单enctype="multipart/form-data",这样把需要上传的文件以二进制的形式传递。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="js/ajaxfileupload.js"></script>


<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<script type="text/javascript">
	function ajaxFileUpload()
	{
	console.log("file upload");
	
       $.ajaxFileUpload({
            url:'<%=basePath %>UploadServlet', //需要链接到服务器地址
			secureuri : false,
			fileElementId : 'uploadFileInput',
			dataType : 'json', 
			success : function(data, status) 
			{
				console.log(status);
				console.log(data);
				 var parsedJson = jQuery.parseJSON(msg);
				//$('#result').html('上传图片成功!请复制图片地址<br/>' + parsedJson.src);

			},
			error : function(data, status, e)
			{
				//$('#result').html('上传图片失败');
			}
		});
	}
	
	
</script>

</head>
<%@ page import="java.util.*,java.io.*" %>
<body>

<body>
  <div id="result" style="FONT:12px 宋体"></div><br/>
 
  <form name="form_uploadImg" action="" method="POST" enctype="multipart/form-data">
	 <input id="uploadFileInput" type="file" size="45" name="uploadFileInput" class="input" />
	 <input type="button" id="buttonUpload" onclick="return ajaxFileUpload();" value="上传图片"/>
 </form>
<hr>
<p id="result">
</p>
</body>

</body>
</html>

后台servlet:需要得到当前网站在真实路径、以及使用url访问时的路径,在servlet当中输出了一下,图片根据时间戳重命名。

package cn.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

/**
 * Servlet implementation class UploadServlet
 */
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

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

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html");   
		response.setCharacterEncoding("UTF-8");
		String realDir = request.getSession().getServletContext().getRealPath("");
		String contextpath = request.getContextPath();
		String basePath = request.getScheme() + "://"
		+ request.getServerName() + ":" + request.getServerPort()
		+ contextpath + "/";
 
		try {
		String filePath = "uploadfiles";
		String realPath = realDir+"\\"+filePath;
		System.out.println("realpath:   "+realPath);
		System.out.println("----------------");
		//判断路径是否存在,不存在则创建
		File dir = new File(realPath);
		if(!dir.isDirectory())
		    dir.mkdir();
 
		if(ServletFileUpload.isMultipartContent(request)){
 
		    DiskFileItemFactory dff = new DiskFileItemFactory();
		    dff.setRepository(dir);
		    dff.setSizeThreshold(1024000);
		    ServletFileUpload sfu = new ServletFileUpload(dff);
		    FileItemIterator fii = null;
		    fii = sfu.getItemIterator(request);
		    String title = "";   //图片标题
		    String url = "";    //图片地址
		    String fileName = "";
			String state="SUCCESS";
			String realFileName="";
		    while(fii.hasNext()){
		        FileItemStream fis = fii.next();
 
		        try{
		            if(!fis.isFormField() && fis.getName().length()>0){
		                fileName = fis.getName();
						Pattern reg=Pattern.compile("[.]jpg|png|jpeg|gif$");
						Matcher matcher=reg.matcher(fileName);
						if(!matcher.find()) {
							state = "文件类型不允许!";
							break;
						}
						realFileName = new Date().getTime()+fileName.substring(fileName.lastIndexOf("."),fileName.length());
		                url = realPath+"\\"+realFileName;
 
		                BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流
		                FileOutputStream a = new FileOutputStream(new File(url));
		                BufferedOutputStream output = new BufferedOutputStream(a);
		                Streams.copy(in, output, true);//开始把文件写到你指定的上传文件夹
		            }else{
		                String fname = fis.getFieldName();
 
		                if(fname.indexOf("pictitle")!=-1){
		                    BufferedInputStream in = new BufferedInputStream(fis.openStream());
		                    byte c [] = new byte[10];
		                    int n = 0;
		                    while((n=in.read(c))!=-1){
		                        title = new String(c,0,n);
		                        break;
		                    }
		                }
		            }
 
		        }catch(Exception e){
		            e.printStackTrace();
		        }
		    }
		    response.setStatus(200);
		    String retxt ="{src:'"+basePath+filePath+"/"+realFileName+"',status:success}";
		    System.out.println("可以通过这个地址直接访问上传的图片:"+retxt);
		    response.getWriter().print(retxt);
		}
		}catch(Exception ee) {
			ee.printStackTrace();
		}

	}

}

效果图:

这是jsp页面的效果图,没什么特别的,选择文件点击上传按钮即可。

看servlet中的输出。在servlet中获取realpath时传递的参数为空字符串,获得的也就是当前网站的realpath,realpath为D:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\test\uploadfiles,也就是我们在电脑硬盘的这个位置就可以找到我们上传的图片。

同时得到的src为http://localhost:8080/test/uploadfiles/1547017322411.jpg,也就是你在浏览器中输入这个地址就可以看到这张图片,如下面图片所示。

所以,我们将上传的图片通过一个<img>标签显示的时候也就明确了img的src属性要写哪一个路径。

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值