文件上传
1、www.apache.org下载commons fileupload 和 commons io
2、创建jsp并附上如下代码
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%> <%
String strId = request.getParameter("id");
int id = 0;
if(strId == null && strId.trim().equals("")){
out.println("你选择的商品有错!");
return;
}
id = Integer.parseInt(strId);
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>index.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="../FileUpload" method="post" enctype="multipart/form-data" name="form1">
<input type="hidden" name="id" value="<%=id %>">
<input type="file" name="file">
<input type="submit" name="Submit" value="upload">
</form>
<br>
<br>
<form name="uploadform" method="POST" action="./servlet/FileUpload" ENCTYPE="multipart/form-data"> <table border="1" width="450" cellpadding="4" cellspacing="2" bordercolor="#9BD7FF"> <tr><td width="100%" colspan="2"> 文件1:<input name="x" size="40" type="file"> </td></tr> <tr><td width="100%" colspan="2"> 文件2:<input name="y" size="40" type="file"> </td></tr> <tr><td width="100%" colspan="2"> 文件3:<input name="z" size="40" type="file"> </td></tr> </table> <br/><br/> <table> <tr><td align="center"><input name="upload" type="submit" value="开始上传"/></td></tr> </table> </form> </body>
</html>
3、直接在项目下创建servlet并附上如下代码
package com.cuijun.shopping.servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.*;
import java.util.*;
import java.util.regex.*;
import java.io.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory; public class FileUpload extends HttpServlet { String uploadPath = ""; @Override
public void init(ServletConfig config) throws ServletException {
uploadPath = config.getInitParameter("uploadPath");
} int id = -1; public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html; charset=GB18030");
PrintWriter out = res.getWriter();
System.out.println(req.getContentLength());
System.out.println(req.getContentType());
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(4096);
// the location for saving data that is larger than getSizeThreshold()
factory.setRepository(new File("d:\\temp\\")); ServletFileUpload upload = new ServletFileUpload(factory);
// maximum size before a FileUploadException will be thrown
upload.setSizeMax(1000000);
try {
List fileItems = upload.parseRequest(req);
// assume we know there are two files. The first file is a small
// text file, the second is unknown and is written to a file on
// the server
Iterator iter = fileItems.iterator(); // 正则匹配,过滤路径取文件名
String regExp = ".+\\\\(.+)$"; // 过滤掉的文件类型
String[] errorType = { ".exe", ".com", ".cgi", ".asp" };
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// 忽略其他不是文件域的所有表单信息
if (item.isFormField()){
if(item.getFieldName().equals("id")){
id = Integer.parseInt(item.getString());
}
}
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if ((name == null || name.equals("")) && size == 0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result) {
for (int temp = 0; temp < errorType.length; temp++) {
if (m.group(1).endsWith(errorType[temp])) {
throw new IOException(name + ": wrong type");
}
}
try { // 保存上传的文件到指定的目录 // 在下文中上传文件至数据库时,将对这里改写
//item.write(new File("d:\\" + m.group(1)));
item.write(new File(uploadPath + id + ".jpg")); out.print(name + "  " + size + "<br>");
} catch (Exception e) {
out.println(e);
} } else {
throw new IOException("fail to upload");
}
}
}
} catch (IOException e) {
out.println(e);
} catch (FileUploadException e) {
out.println(e);
} // 保存上传的文件到指定的目录 // 在下文中上传文件至数据库时,将对这里改写 } }
4、注意代码中的路径问题。千万小心。
1、路径中\\代表\。不要写成//。
2、路径后面不要忘记添加\\。
5、接受id。
1、先定义int id = -1;
2、判断接受的域是正常域if (item.isFormField()){
if(item.getFieldName().equals("id")){
id = Integer.parse(item.getString());
}
}
3、把上传的文件写到内存item.write(new File(uploadPath + id + ".jpg"));
6、修改WEB-INF下的配置文件
1、添加<init-param>
<param-name>uploadPath</param-name>
<param-value>D:\\web\\Shopping\\WebContent\\image\\product\\</param-value>
</init-param>
2、在servlet中重写init方法String uploadPath = ""; @Override
public void init(ServletConfig config) throws ServletException {
uploadPath = config.getInitParameter("uploadPath");
}
7、Over!

最新文章

  1. python装饰器
  2. Angularjs-项目搭建
  3. 强有力的Linux历史命令 你还记得几个
  4. 访问javaweb服务器sessionid存放问题
  5. 时间工厂[XDU1013]
  6. vs开发工具使用问题
  7. MVC中HtmlHelper用法大全参考
  8. JavaScript-学习一字符串
  9. Swift 面向对象
  10. EL与JSTL注意事项汇总
  11. 第七章 DAO模式
  12. Node.js HTTP
  13. 从swap说引用
  14. PythonStudy——第一阶段性测试
  15. 【Mysql】mysql使用触发器创建hash索引
  16. npm降低版本(降级)
  17. Codeforces 803C. Maximal GCD 二分
  18. 第五次Scrum meeting
  19. Python 使用 os.fork() 创建子进程
  20. DXP常用的设置及快捷键

热门文章

  1. VirtualBox 扩展包卸载或安装失败(VERR_ALREADY_EXISTS)
  2. 19. Crontab
  3. T4模板试水篇1_入门
  4. Linq 标准查询操作符三
  5. Cocoapods依赖管理
  6. 简单的拖动手势控制侧拉view显示
  7. OD调试3--reverseMe
  8. float的理解
  9. HTML5简单入门系列(三)
  10. new String(byte[])和byte[]toString() 的区别