码迷,mamicode.com
首页 > 其他好文 > 详细

commons-fileupload-1.4使用及问题

时间:2019-04-07 19:16:27      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:pattern   trace   lte   jsp   request   就会   iter   java   indexof   

文件上传

 使用commons-fileupload-1.4控件及依赖的commons-io-2.6控件

jsp页面中内容

<form action="../servlet/FileUpdate" method="post" enctype="multipart/form-data">
        <div align="center">
            <fieldset style="width:80%">
                <legend>上传文件</legend><br/>
                    <div align="left">上传文件1</div>
                    <div align="left">
                        <input type="file" name="file1"/>
                    </div>
                   
                    <div>
                        <div align=‘left‘>
                            <input type=‘submit‘ value="上传文件"/>
                        </div>
                    </div>
            </fieldset>
        </div>
 </form>

技术图片

servlet

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         response.setContentType("text/html;charset=utf-8");
 4         PrintWriter out = response.getWriter();
 5         // Create a factory for disk-based file items
 6         DiskFileItemFactory factory = new DiskFileItemFactory();
 7         // Configure a repository (to ensure a secure temp location is used)
 8         ServletContext servletContext = this.getServletConfig().getServletContext();
 9         File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
10         factory.setRepository(repository);
11         // Create a new file upload handler
12         ServletFileUpload upload = new ServletFileUpload(factory);
13         upload.setHeaderEncoding("utf-8");
14         // Parse the request
15         String saveName = "";
16         try {
17             List<FileItem> items = upload.parseRequest(request);
18             for (FileItem item : items) {
19                 if(item.isFormField()){//如果只是表单中信息,不是表单文件
20                     String fieldName = item.getFieldName();
21                     String fieldValue = item.getString();
22                     out.print("<br>fieldName: "+fieldName+",--fieldValue: "+fieldValue);
23                 }else{
24                     InputStream inputStream = item.getInputStream();
25                     //得到保存文件的路径
26                     String realpath=this.getServletContext().getRealPath("update");
27                     //得到上传的文件的名字,可能显示的是路径,所以需要取出文件名
28                     String allFilePath = item.getName();
29                     //getName()值为绝对路径!!!下面代码转换取文件名
30                     String fileName = null;
31                     int ind = allFilePath.lastIndexOf("\\");
32                     if (ind != -1) {
33                         fileName = allFilePath.substring(ind + 1);
34                     }else {
35                         fileName = allFilePath;
36                     }
37                    
38                     out.print("<br>上传的文件名: "+fileName);
39                     //读取的不能是目录,应该加上文件名
40                     File file=new File(realpath + "\\" + fileName);
41                     if(file.getParentFile().exists()){
42                         file.createNewFile();//创建文件
43                     }else {
44                         file.getParentFile().mkdirs();//创建父级文件路径
45                         file.createNewFile();//创建文件
46                     }
47                     FileOutputStream fos=new FileOutputStream(file);
48                     byte[] bytes= new byte[1024];
49                     int len=0;
50                     //写入文件
51                     while((len=inputStream.read(bytes))!=-1){
52                         fos.write(bytes, 0, len);
53                     }
54 
55                     inputStream.close();
56                     fos.close();
57                     out.print("<h3>"+allFilePath+"文件上传成功</h3>");
58                 }
59             }
60             
61             
62         } catch (FileUploadException e) {
63             e.printStackTrace();
64         } catch (FileNotFoundException e) {
65             e.printStackTrace();
66             System.out.println(saveName);
67         }
68    }

 

web.xml

<servlet>
    <servlet-name>FileUpdate</servlet-name>
    <servlet-class>com.oneself.shopping.servlet.FileUpdate</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FileUpdate</servlet-name>
    <url-pattern>/servlet/FileUpdate</url-pattern>
</servlet-mapping>

 

 

问题

  java.io.FileNotFoundException: D:\update (拒绝访问。)

  FileOutputStream读取流的时候如果是文件夹,就会出此错误。读取的目录后面要加文件名,如下:

 1  File file=new File(realpath + "\\" + fileName);
 2                     if(file.getParentFile().exists()){
 3                         //file.getParentFile().mkdirs();//创建父级文件路径
 4                         file.createNewFile();//创建文件
 5                         System.out.println(file.exists());
 6                     }else {
 7                         file.getParentFile().mkdirs();//创建父级文件路径
 8                         file.createNewFile();//创建文件
 9                     }
10                     FileOutputStream fos=new FileOutputStream(file);

commons-fileupload-1.4使用及问题

标签:pattern   trace   lte   jsp   request   就会   iter   java   indexof   

原文地址:https://www.cnblogs.com/puhc/p/10666552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!