zoukankan      html  css  js  c++  java
  • 服务器------1.app端上传文件至服务器后台,web端上传文件存储到服务器

    1.android前端发送服务器请求

     在spring-mvc.xml 将过滤屏蔽(如果不屏蔽 ,文件流为空)

    1 <!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" 
    2         p:defaultEncoding="UTF-8"> <property name="maxUploadSize"> <value>2000000000</value> 
    3         </property> <property name="maxInMemorySize"> <value>2000000000</value> </property> 
    4         </bean> -->

    2.在spring-mvc.xml 中加入请求url:<value>fileUploadController.do?uploads</value>  

     1     <!-- 拦截器 -->
     2     <mvc:interceptors>
     3         <mvc:interceptor>
     4             <mvc:mapping path="/**" />
     5             <bean class="org.jeecgframework.core.interceptors.EncodingInterceptor" />
     6         </mvc:interceptor>
     7         <mvc:interceptor>
     8             <mvc:mapping path="/**" />
     9             <bean class="org.jeecgframework.core.interceptors.AuthInterceptor">
    10                 <property name="excludeUrls">
    11                     <list>
    12                         <value>loginController.do?goPwdInit</value>
    13                         <value>loginController.do?pwdInit</value>
    14                         <value>loginController.do?login</value>
    15                         <value>loginController.do?checkuser</value>
    16                         <value>systemController.do?saveFiles</value>
    17                         <value>systemController.do?saveFilesBeads</value>
    18                         <value>systemController.do?saveFilesCustomer</value>
    19                         <value>systemController.do?saveNews</value>
    20                         <value>iconController.do?saveIcon</value>
    21                         <value>userController.do?savesign</value>
    22                         <value>xiNaiInterfaceController.do?interface</value>
    23                         <value>fileUploadController.do?uploads</value>
    24                         <value>jpPersonController.do?importExcel</value> <!-- for:[119]excel导入风格统一 -->
    25                     </list>
    26                 </property>
    27             </bean>
    28         </mvc:interceptor>
    29     </mvc:interceptors>

    3.服务器请求 获取存储目录

    linux服务器无法再创建目录,windows可以多加入tomcat下

    http://192.168.0.112:8080/properties/fileUploadController.do?uploads

      1 /***
      2  * 文件上传例子   resource code encoding is utf-8
      3  * <br>主要为了android客户端实现功能  
      4  *
      5  */
      6 @Controller
      7 @RequestMapping("/fileUploadController")
      8 public class FileUploadController extends ActionSupport {
      9      14     
     15     @RequestMapping(params = "uploads")
     16     public void doPost(HttpServletRequest request, HttpServletResponse response)
     17             throws ServletException, IOException
     18     {
     19         response.setContentType("text/html");
     20         PrintWriter out = response.getWriter();
     21 
     22         // 创建文件项目工厂对象
     23         DiskFileItemFactory factory = new DiskFileItemFactory();
     24 
     25         // 设置文件上传路径
     26         //String upload="D:/sinia/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties/upload/";
     27         
     28         String upload = request.getRealPath("/");
     29         // 获取系统默认的临时文件保存路径,该路径为Tomcat根目录下的temp文件夹
     30         String temp = System.getProperty("java.io.tmpdir");
     31         // 设置缓冲区大小为 5M
     32         factory.setSizeThreshold(1024 * 1024 * 5);
     33         // 设置临时文件夹为temp
     34         factory.setRepository(new File(temp));
     35         // 用工厂实例化上传组件,ServletFileUpload 用来解析文件上传请求
     36         ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
     37         JSONObject ob = new JSONObject();
     38         // 解析结果放在List中
     39         try
     40         {
     41             List<FileItem> list = servletFileUpload.parseRequest(request);
     42         
     43             for (FileItem item : list)
     44             {
     45                 String name = item.getFieldName();
     46                 InputStream is = item.getInputStream();
     47 
     48                 if (name.contains("content"))
     49                 {
     50                     System.out.println(inputStream2String(is));
     51                 } 
     52                 else if(name.contains("file"))
     53                 {
     54                     try
     55                     {
     56                         inputStream2File(is, upload + "/" + item.getName());
     57                         
     58                         //ob.put("path", upload + "\" + item.getName());
     59                         ob.put("path", upload  +item.getName());
     60                         out.write(ob.toString());
     61                     } catch (Exception e)
     62                     {
     63                         e.printStackTrace();
     64                     }
     65                 }
     66             }
     67             //out.write("success");
     68         } catch (FileUploadException e)
     69         {
     70             out.write("failure");
     71         }
     72 
     73         out.flush();
     74         out.close();
     75     }
     76     // 流转化成字符串
     77     public static String inputStream2String(InputStream is) throws IOException
     78     {
     79         ByteArrayOutputStream baos = new ByteArrayOutputStream();
     80         int i = -1;
     81         while ((i = is.read()) != -1)
     82         {
     83             baos.write(i);
     84         }
     85         return baos.toString();
     86     }
     87     // 流转化成文件
     88     public static void inputStream2File(InputStream is, String savePath)
     89             throws Exception
     90     {
     91         System.out.println("文件保存路径为:" + savePath);
     92         File file = new File(savePath);
     93         InputStream inputSteam = is;
     94         BufferedInputStream fis = new BufferedInputStream(inputSteam);
     95         FileOutputStream fos = new FileOutputStream(file);
     96         int f;
     97         while ((f = fis.read()) != -1)
     98         {
     99             fos.write(f);
    100         }
    101         fos.flush();
    102         fos.close();
    103         fis.close();
    104         inputSteam.close();
    105     }

    文件存储目录 

    D:/sinia/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties

    后台加入上传功能:jsp上传文档:

    jsp文档 加入上传功能

    <script type="text/javascript">
    function commonUpload() {
        $.dialog({
            content : "url:xnProjectController.do?uploadprofile",
            lock : true,
            title : "图片上传",
            width : 400,
            height : 100,
            parent : windowapi,
            cache : false,
            zIndex : 9999,
    
            ok : function() {
                var iframe = this.iframe.contentWindow;
                iframe.uploadCallback(callback);
                return true;
            },
            cancelVal : '关闭',
            cancel : function() {
            }
        });
    }
    </script>

    <td > 上传文件:</td>
                    <td ><input type="button" onclick="commonUpload()" value="工程进度文档文件"></td>
                </tr>

    在java控制器上

    //上传文件
        @RequestMapping(params = "uploadprofile")
        public ModelAndView uploadprofile(HttpServletRequest req) {
            return new ModelAndView("properties/xnUploadFile/uploadfile");
        }

    uploadfile.jsp

     1 <%@ page language="java" pageEncoding="UTF-8"%>
     2 <!DOCTYPE HTML>
     3 <html>
     4 <head>
     5  <title>文件上传</title>
     6 </head>
     7 <body>
     8  <form action="${pageContext.request.contextPath}/servlet/XnUploadFileController" enctype="multipart/form-data" method="post">
     9   上传文件:<input type="file" name="file"><br/>
    10   <input type="submit" value="提交">
    11  </form>
    12 </body>
    13 </html>

    XnUploadFileController.java

      1 package jeecg.properties;
      2 
      3 import java.io.File;
      4 import java.io.FileOutputStream;
      5 import java.io.IOException;
      6 import java.io.InputStream;
      7 import java.util.List;
      8 
      9 import javax.servlet.ServletException;
     10 import javax.servlet.http.HttpServlet;
     11 import javax.servlet.http.HttpServletRequest;
     12 import javax.servlet.http.HttpServletResponse;
     13 
     14 import jeecg.system.pojo.base.TSDocument;
     15 import jeecg.system.service.SystemService;
     16 
     17 import org.apache.commons.fileupload.FileItem;
     18 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
     19 import org.apache.commons.fileupload.servlet.ServletFileUpload;
     20 import org.apache.log4j.Logger;
     21 import org.jeecgframework.core.common.model.common.UploadFile;
     22 import org.jeecgframework.core.common.model.json.AjaxJson;
     23 import org.jeecgframework.core.constant.Globals;
     24 import org.jeecgframework.core.util.DataUtils;
     25 import org.jeecgframework.core.util.MyBeanUtils;
     26 import org.jeecgframework.core.util.MyClassLoader;
     27 import org.jeecgframework.core.util.StringUtil;
     28 import org.jeecgframework.core.util.oConvertUtils;
     29 import org.springframework.beans.factory.annotation.Autowired;
     30 import org.springframework.stereotype.Controller;
     31 import org.springframework.web.bind.annotation.RequestMapping;
     32 import org.springframework.web.bind.annotation.ResponseBody;
     33 import org.springframework.web.servlet.ModelAndView;
     34 
     35 import com.jspsmart.upload.SmartUpload;
     36 
     37 
     38 
     39 @Controller
     40 @RequestMapping("/xnUploadFileController")
     41 public class XnUploadFileController  extends HttpServlet{
     42     /**
     43      * Logger for this class
     44      */
     45     private static final Logger logger = Logger.getLogger(XnUploadFileController.class);
     46 
     47     @Autowired
     48     private SystemService systemService;
     49     private String message;
     50     
     51     public String getMessage() {
     52         return message;
     53     }
     54 
     55     public void setMessage(String message) {
     56         this.message = message;
     57     }
     58     @RequestMapping(params = "upload")
     59     public ModelAndView upload(HttpServletRequest request) {
     60         return new ModelAndView("properties/xnUploadFile/uploadfile");
     61     }
     62     
     63     public void doGet(HttpServletRequest request, HttpServletResponse response)
     64             throws ServletException, IOException {
     65         
     66         //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
     67         
     68         
     69         /**
     70          * 
     71          * 在server 目录里创建upload文件夹
     72          * 
     73          * .metadata.pluginsorg.eclipse.wst.server.core
     74          * 
     75          */
     76         
     77         String savePath = this.getServletContext().getRealPath("/");
     78         //String savePath ="D:/sinia/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties/upload/";
     79         File file = new File(savePath);
     80         //判断上传文件的保存目录是否存在
     81         if (!file.exists() && !file.isDirectory()) {
     82             System.out.println(savePath+"目录不存在,需要创建");
     83             //创建目录
     84             file.mkdir();
     85         }
     86         //消息提示
     87         String message = "";
     88         try{
     89             //使用Apache文件上传组件处理文件上传步骤:
     90             //1、创建一个DiskFileItemFactory工厂
     91             DiskFileItemFactory factory = new DiskFileItemFactory();
     92             //2、创建一个文件上传解析器
     93             ServletFileUpload upload = new ServletFileUpload(factory);
     94             //解决上传文件名的中文乱码
     95             upload.setHeaderEncoding("UTF-8"); 
     96             //3、判断提交上来的数据是否是上传表单的数据
     97             /*if(!ServletFileUpload.isMultipartContent(request)){
     98                 //按照传统方式获取数据
     99                 return;
    100             }*/
    101             //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
    102             List<FileItem> list = upload.parseRequest(request);
    103             for(FileItem item : list){
    104                 //如果fileitem中封装的是普通输入项的数据
    105                 if(item.isFormField()){
    106                     String name = item.getFieldName();
    107                     //解决普通输入项的数据的中文乱码问题
    108                     String value = item.getString("UTF-8");
    109                     //value = new String(value.getBytes("iso8859-1"),"UTF-8");
    110                     System.out.println(name + "=" + value);
    111                 }else{//如果fileitem中封装的是上传文件
    112                     //得到上传的文件名称,
    113                     String filename = item.getName();
    114                     System.out.println(filename);
    115                     if(filename==null || filename.trim().equals("")){
    116                         continue;
    117                     }
    118                     //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:a1.txt,而有些只是单纯的文件名,如:1.txt
    119                     //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
    120                     filename = filename.substring(filename.lastIndexOf("\")+1);
    121                     //获取item中的上传文件的输入流
    122                     InputStream in = item.getInputStream();
    123                     //创建一个文件输出流
    124                     FileOutputStream out = new FileOutputStream(savePath  + filename);
    125                     //创建一个缓冲区
    126                     byte buffer[] = new byte[1024];
    127                     //判断输入流中的数据是否已经读完的标识
    128                     int len = 0;
    129                     //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
    130                     while((len=in.read(buffer))>0){
    131                         //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\" + filename)当中
    132                         out.write(buffer, 0, len);
    133                     }
    134                     //关闭输入流
    135                     in.close();
    136                     //关闭输出流
    137                     out.close();
    138                     //删除处理文件上传时生成的临时文件
    139                     item.delete();
    140                     message = "文件上传成功!";
    141                 }
    142             }
    143         }catch (Exception e) {
    144             message= "文件上传失败!";
    145             e.printStackTrace();
    146 
    147         }
    148         
    149         
    150         /*request.setAttribute("message",message);
    151         request.getRequestDispatcher("properties/xnUploadFile/message.jsp").forward(request, response);*/
    152     }
    153 
    154     public void doPost(HttpServletRequest request, HttpServletResponse response)
    155             throws ServletException, IOException {
    156 
    157         doGet(request, response);
    158     }
    159 }

     servelet请求 web.xml中插入XnUploadFileController

    <servlet-mapping>
    <servlet-name>XnUploadFileController</servlet-name>
    <url-pattern>/servlet/XnUploadFileController</url-pattern>
    </servlet-mapping>

     将文件存储到某一目录下:

    //文件名
    String savePath = this.getServletContext().getRealPath("/zjtjb/");
    //String savePath ="D:/wuye/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties/upload/";
    File file = new File(savePath);
    //判断上传文件的保存目录是否存在
    if (!file.exists() && !file.isDirectory()) {
    System.out.println(savePath+"目录不存在,需要创建");
    //创建目录
    file.mkdir();
    }
    //消息提示
    String message = "";

    存储到某一目录:

    System.out.println(filename);
    if(filename==null || filename.trim().equals("")){
    continue;
    }
    //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:a1.txt,而有些只是单纯的文件名,如:1.txt
    //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
    filename = filename.substring(filename.lastIndexOf("\")+1);
    //获取item中的上传文件的输入流
    InputStream in = item.getInputStream();
    //创建一个文件输出流

    if (filename.contains("zjtjb")) {
    //加上 才能生成目录
    savePath=savePath+"\";
    FileOutputStream out = new FileOutputStream(savePath+ filename);


    //创建一个缓冲区
    byte buffer[] = new byte[1024];
    //判断输入流中的数据是否已经读完的标识
    int len = 0;
    //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
    while((len=in.read(buffer))>0){
    //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\" + filename)当中
    out.write(buffer, 0, len);
    }
    //关闭输入流
    in.close();
    //关闭输出流
    out.close();
    //删除处理文件上传时生成的临时文件
    item.delete();
    message = "文件上传成功!";
    }
    }
    }
    }catch (Exception e) {
    message= "文件上传失败!";
    e.printStackTrace();

    }

  • 相关阅读:
    Python 实现扫码二维码登录
    深入理解Python生成器(Generator)
    EasyUI DataGrid 结合Java 各种技巧大综合,你值得拥有。
    C#中读取XML错误解决: System.Xml.XmlException: “Element”是无效的 XmlNodeType。
    CSS3学习系列
    关于java中文乱码问题,我有话要说。
    表格的相关操作
    动态生成列
    开发随笔
    在ASP页面进行参数化 使用access数据库
  • 原文地址:https://www.cnblogs.com/coriander/p/6183619.html
Copyright © 2011-2022 走看看