使用ajax上传文件

前端

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="importJquery.jsp"%>
<base href=<%=request.getContextPath()%>"/jsp/"/>
<html>
	<head>
	</head>
<body>
<form  id="uploadFile" >

	<table  width="100%" border="0" cellspacing="5" cellpadding="0">
		<thead>
			<tr><td align="center" colspan="2" class="text_tabledetail2">增加新闻</td></tr>
		</thead>
		<tbody>
			<tr>
				<td style="text-align:right;" class="text_tabledetail2">分类</td>
				<td style="text-align:left;"> 
				<!-- 列出所有的新闻分类 -->
					<select name="categoryId">
	        			<option value="1">国内</option>
	        			<option value="2">国际</option>
	        			<option value="3">娱乐</option>
	        			<option value="4">军事</option>
	        			<option value="5">财经</option>
	        			<option value="6">天气</option>
	        		</select>
				</td>
			</tr>
			<tr>
				<td style="text-align:right;" class="text_tabledetail2">标题</td>
				<td style="text-align:left;"><input type="text" name="title" id="title" value=""/></td>
			</tr>
			<tr>
				<td style="text-align:right;" class="text_tabledetail2">作者</td>
				<td style="text-align:left;"><input type="text" name="author" id="author" value=""/></td>
			</tr>
			
			<tr>
				<td style="text-align:right;" class="text_tabledetail2">摘要</td>
				<td style="text-align:left;"><textarea id="summary" name="summary" rows="8" cols="50"></textarea></td>
			</tr>
			<tr>
				<td style="text-align:right;" class="text_tabledetail2">内容</td>
				<td style="text-align:left;">
				<div id="xToolbar"></div>
				<textarea id="newscontent" name="newscontent" rows="8" cols="30" class="ckeditor"></textarea></td>
			</tr>
			<tr>
				<td style="text-align:right;" class="text_tabledetail2">上传图片</td>
				<td style="text-align:left;"><input type="file" name="file1" value="文件上传"></td>
			</tr>
			<tr>
				<td style="text-align:center;" colspan="2">
					<button type="button" class="page-btn" name="save" id="save">保存</button>
					<button type="button" class="page-btn" name="return" onclick="javascript:location.href='newsDetailList.jsp'">返回</button>
				</td>
			</tr>
		</tbody>
	</table>
</form>
<script type="text/javascript">



    $(function () {
        <%--var flag='${param.flag}';--%>
        <%--if(flag!=""&&flag!=null&&flag!=undefined){--%>
            <%--if(flag=="false"){--%>
                <%--alert("更新失败!");--%>
            <%--}--%>
        <%--}--%>
		
		$("#save").click(function () {


				var date=$("#uploadFile")[0];  //获取表单中的值
				var formData = new FormData(date);  //使用FormData()处理表单中的值

				$.ajax({
					"url":"/newsServlet?opr=add",  //发送的URL
					"type":"POST",        //类型
					"data":formData,      //将数据发送
					// async: false,       //是否同步,否
					// cache: false,       //是否缓存,否
					"dataType":"json",
					"contentType": false,     //需要使用
					"processData": false,     //需要使用
					"success":function(data){
						if(data.flag=="true"){
							alert("增加成功!");
							location.href="newsDetailList.jsp";
						}else{
							alert("增加失败,请检查网络!");
						}
					}
				});

			
		})

    });

</script>
</body>
</html>

后端servlet

   boolean uploadflag = false;
            String uploadFileName = ""; //图片路径
            String fieldName = "";      //表单名称

            //创建新闻
            News n = new News();
            n.setCreateDate(new Date());
            n.setModifyDate(new Date());

            //解析请求之前先判断请求类型是否为文件上传类型
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            System.out.println(isMultipart);

            //指定上传位置
            String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/");

            System.out.println("上传位置" + uploadFilePath);

            //设置图片储存位置
            File saveDir = new File(uploadFilePath);

            //如果目录不存在,就创建目录
            if (!saveDir.exists()) {
                saveDir.mkdir();
            }

            //获取表单请求
            if (isMultipart) {
                //创建文件上传核心类
                FileItemFactory factory = new DiskFileItemFactory(); // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload

                ServletFileUpload upload = new ServletFileUpload(factory); // 用以上工厂实例化上传组件
                try {
                    //处理表单请求
                    List<FileItem> items = upload.parseRequest(request);

                    //迭代器迭代请求
                    Iterator<FileItem> iter = items.iterator();

                    while (iter.hasNext()) {
                        //获取单个请求
                        FileItem item = (FileItem)iter.next();

                        if (item.isFormField()) {// 如果是普通表单控件
                            fieldName = item.getFieldName();// 获得该字段名称,对应表单name属性

                            //分类处理
                            if (fieldName.equals("title")) {
                                n.setTitle(item.getString("UTF-8"));//获得该字段值
                            } else if (fieldName.equals("categoryId")) {
                                n.setCategoryId(Integer.parseInt(item.getString("UTF-8")));
                            } else if (fieldName.equals("summary")) {
                                n.setSummary(item.getString("UTF-8"));
                            } else if (fieldName.equals("newscontent")) {
                                n.setContent(item.getString("UTF-8"));
                            } else if (fieldName.equals("author")) {
                                n.setAuthor(item.getString("UTF-8"));
                            }


                        } else {// 如果为文件域
                            String fileName = item.getName();// 获得文件名(全路径)
                            System.out.println("文件名:"+fileName);

                            if (fileName != null && !fileName.equals("")) {
                                File fullFile = new File(fileName);
                                File saveFile = new File(uploadFilePath, fullFile.getName());//将文件保存到指定的路径
                                item.write(saveFile);
                                uploadFileName = fullFile.getName();
                                n.setPicPath(uploadFileName);

                            }

                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
            System.out.println("上传成功之后的文件名:" + n.getPicPath());
            //调用后台的方法,将新闻信息插入数据库中
            int r = newsService.addNews(n);
            System.out.println("是否处理成功:"+r);
            if (r>0) {
                uploadflag = true;
            }
            out.write("{\"flag\":\"" + uploadflag + "\"}");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值