Â
å¨è¿å»çè¿ä¸å¨éï¼ææç»ç»çå¨åæ件ä¸ä¼ ä¸è½½ãæè¿å 天éå°çåï¼ä¸ä¸åä¸æ¥ï¼è®©å¤§å®¶è½é¿å ã
Â
Â
Â
1ã å¼åç¯å¢
Â
Struts2.3.20+spring3.2.7+mybatis3.3.0
Â
2ã 使ç¨ajaxfileupload.js+JQuery+servlet
Â
å¨ä¸ä¼ çè¿ç¨ä¸ï¼å¾çä¸ä¼ ä¸ä¸ï¼ä¸è½½æ件ä¹ä¸å®æ´ï¼æå¯è½æ¥éã
Â
注æå¨struts2è¦ä½¿ç¨Servlet
Â
Web.xmlä¸
Â
 <servlet-mapping>
Â
   <servlet-name>XXServlet</servlet-name>
Â
   <url-pattern>/XXServlet.servlet</url-pattern>
Â
</servlet-mapping>
Â
Â
Â
    页é¢è°ç¨è¦åæ
Â
document.myform.action= "${pageContext.request.contextPath}/XXServlet.servlet";
Â
document.myform.submit();
Â
Â
Â
ä¸ä¼ ä¸æåçåå ï¼æå¯è½æ¯struts2æ¦æªä¸å°æ件ï¼ä¹æå¯è½æ¯ç»ä»¶ä¸å ¼å®¹ï¼æå¨IE7ä¸æµè¯æ²¡æé®é¢ï¼ä½æ¯å¨IE11ä¸æé®é¢ã
Â
ç¾åº¦äºN次ï¼å¥½å¤æ¹æ³é½è¯è¿äºï¼ç»è®ºä¸è¡ãæ¢ç¶ä¸è¡ï¼é£ä¹èèå®å®çç¨struts2èªå¸¦çä¸ä¼ ä¸è½½ç»ä»¶å§ã
Â
3ã ä¸ä¼ 主页é¢
Â
<td bgcolor="#D3DFEF" width="100%" colspan="3">
Â
      <iframe id="iframe" scrolling="no" width="100%" height="25" frame src="${pageContext.request.contextPath}/Tksm/proplan/UploadFiles.jsp" ></iframe>
Â
</td>
Â
4ã UploadFiles.jsp页é¢é¨å代ç
Â
function testUpload(){
Â
      var excelpath = document.forms[0].upload.value;
Â
      var url = '${pageContext.request.contextPath}/modiProImages';
Â
     Â
Â
      if(excelpath!=null && excelpath!=''){
Â
             var ss = excelpath.split('.');
Â
             var fileType = ss[ss.length-1];
Â
             if(fileType=='jpg'||fileType=='JPG'||fileType=='pdf' || fileType=='PDF'){
Â
             document.all.test.action = url;
Â
             document.all.test.submit();
Â
             }else{
Â
                    alert("åªå 许ä¸ä¼ .jpgå.pdfç±»åæ件!");
Â
                    document.all.test.reset();
Â
                    return ;
Â
             }
Â
      }else{
Â
             alert("请éæ©ä¸ä¼ æ件");
Â
             return ;
Â
      }
Â
}
Â
Â
Â
<form method="post" id="test" action="#" enctype="multipart/form-data">
Â
      <table width="100%" cellspacing=0>
Â
             <tr>
Â
                    <td colspan="1" style="solid #8CB1D6;background-color: #D3DFEF;">
Â
                           <input type="file" name="upload" style="width:360px; height: 24px;">
Â
                           <button οnclick="testUpload();" style="height: 24px;">ä¸ä¼ </button>
Â
                    </td>
Â
             </tr>
Â
 </table>
Â
</form>
Â
5ã å¨struts.xml注å
Â
<action name="modiProImages" class="proInfoAction" method="modiProImages">
Â
 <result name="success">/Tksm/proplan/UploadFiles.jsp</result>
Â
 <result name="error">/WEB-INF/index/error.jsp</result>
Â
 <result name="input">/Tksm/proplan/UploadFiles.jsp</result>
Â
</action>
Â
6ã ProInfoAction.java
Â
   private File upload;
Â
   private String uploadFileName;
Â
   private String uploadContentType;
Â
   çæsetter/getteræ¹æ³
Â
@SuppressWarnings("unchecked")
Â
public String modiProImages() throws Exception {
Â
   request = ServletActionContext.getRequest();
Â
   session = request.getSession(true);
Â
   Profiles profiles = new Profiles();
Â
   File fileinit;
Â
  Â
Â
   String tmpPath = "D:\\modiimages";
Â
 fileinit = new File(tmpPath);
Â
 if (!fileinit.isDirectory()){
Â
  fileinit.mkdir();
Â
 }
Â
 String savePath = "modiimages/";
Â
   String message = "";
Â
   try {
Â
      File f = this.getUpload();
Â
      //System.out.println("name=="+this.getUploadFileName());
Â
      FileInputStream inputstr = new FileInputStream(f);
Â
     Â
Â
  String wjmc = this.getUploadFileName();
Â
  int index = wjmc.lastIndexOf(".");
Â
  wjmc = wjmc.substring(index + 1, wjmc.length());
Â
 Â
Â
  String filename = pronum+"_"+LineNbr+"."+wjmc;
Â
  File uploadFile = new File(tmpPath + "/" + filename);
Â
     Â
Â
     Â
Â
      FileOutputStream outputstr = new FileOutputStream(uploadFile);
Â
      byte[] buf = new byte[1024];
Â
     Â
Â
      int length = 0;
Â
      while ((length = inputstr.read(buf)) != -1) {
Â
          outputstr.write(buf, 0, length);
Â
      }
Â
      outputstr.flush();
Â
      outputstr.close();
Â
      inputstr.close();
Â
Â
Â
  message = "æ件ä¸ä¼ æå!";
Â
  return "success";
Â
   }catch(Exception e){
Â
      e.printStackTrace();
Â
      message = "æ件ä¸ä¼ 失败";
Â
      return "input";
Â
   }
Â
}
Â
Â
Â
7ã é ç½®tomcatèæç®å½
Â
å¨Tomcat x.x\conf\Catalina\localhostæ件夹ä¸æ°å»ºå·¥ç¨åå.xmlæ件
Â
å¦ææç®æ¯å级èæç®å½ï¼æè å¤çº§èæç®å½ï¼åæaa#bb#cc.xml
Â
Â
Â
éè¦æå¨å¨Dçæ°å»ºmodiimagesæ件夹ã
Â
Â
Â
<?xml version='1.0' encoding='utf-8'?>
Â
<Context docBase="D:/modiimages " path="">
Â
</Context>
Â
8ã ä¸è½½æ件
Â
function downFile(filename){
Â
   var href="${pageContext.request.contextPath}/downCustFile?fileName=" target="_blank" rel="external nofollow" +filename;
Â
   document.forms[0].action=href;
Â
   document.forms[0].submit();
Â
}
Â
<td align="center" class="tda">
Â
<a href="javascript:downFile('<s:property value=" target="_blank" rel="external nofollow" filename"/>')">
Â
<font color="#3300CC"><s:property value="filename"/></font>
Â
</a>
Â
</td>
Â
9ã ä¸è½½struts2-sunspoter-stream-1.0.jar
Â
10ã             Struts.xmlä¸æ³¨åæ¹æ³
Â
Â
Â
Â
Â
      <result-types>
Â
          <result-type name="streamx" class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX" />
Â
      </result-types>
Â
Â
Â
<action name="downCustFile" class="proInfoAction" method="downCustFile">
Â
 <result name="success" type="stream">
Â
Â
Â
ç¹å»ä¸è½½æ件æ¶ï¼ç¹å»åæ¶ä¼æ¥éï¼
Â
严é: Servlet.service() for servlet jsp threw exception
Â
java.lang.IllegalStateException: getOutputStream() has already been called for this response
Â
è¿æ¯ä¸ä¸ªstruts2çbug
Â
Â
Â
<action name="downCustFile" class="proInfoAction" method="downCustFile">
Â
 <result name="success" type="streamx">          Â
Â
   <param name="inputName">inputStream</param>
Â
    <param name="contentDisposition">attachment; filename=${fileName}</param>
Â
    <param name="bufferSize">4096</param>
Â
    <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
Â
 </result>
Â
 <result name="error">/WEB-INF/index/error.jsp</result>
Â
</action>
Â
11ã             ProInfoAction
Â
   private String fileName;
Â
   private InputStream inputStream;
Â
çægetter/setteræ¹æ³
Â
Â
Â
public InputStream getInputStream(){Â Â Â Â Â Â Â Â
Â
      request = ServletActionContext.getRequest();
Â
      String filepath = "/modiimages/"+this.getFileName();
Â
      //System.out.println("filepath="+"/"+filepath);
Â
      try {
Â
             String fullpath = request.getRequestURL().toString();
Â
             int index = fullpath.lastIndexOf("/");
Â
             fullpath = fullpath.substring(0, index + 1)+filepath;          Â
Â
             URL url = new URL(fullpath);
Â
             URLConnection conn = url.openConnection();
Â
             inputStream = conn.getInputStream();
Â
            Â
Â
             //System.out.println("inputStream=="+inputStream);
Â
             return inputStream;
Â
      } catch (MalformedURLException e) {
Â
             //e.printStackTrace();
Â
      } catch (IOException e) {
Â
             //e.printStackTrace();
Â
      }
Â
      return null;
Â
     Â
Â
}
Â
     Â
Â
public String downCustFile() throws Exception {
Â
      return "success";
Â
}
Â
 è¿ä¸ç¯æç« ï¼åèäº
https://blog.csdn.net/xiangchengguan/article/details/39860065
http://zfc.iteye.com/blog/1050009
https://www.cnblogs.com/lcngu/p/5094159.html
Â