SmartUpload.java
上传用户:junmaots
上传日期:2022-07-09
资源大小:2450k
文件大小:25k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. package com.jspsmart.upload;
  2. import java.io.*;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.util.Vector;
  6. import javax.servlet.*;
  7. import javax.servlet.http.*;
  8. import javax.servlet.jsp.JspWriter;
  9. import javax.servlet.jsp.PageContext;
  10. public class SmartUpload
  11. {
  12.     protected byte m_binArray[];
  13.     protected HttpServletRequest m_request;
  14.     protected HttpServletResponse m_response;
  15.     protected ServletContext m_application;
  16.     private int m_totalBytes;
  17.     private int m_currentIndex;
  18.     private int m_startData;
  19.     private int m_endData;
  20.     private String m_boundary;
  21.     private long m_totalMaxFileSize;
  22.     private long m_maxFileSize;
  23.     private Vector m_deniedFilesList;
  24.     private Vector m_allowedFilesList;
  25.     private boolean m_denyPhysicalPath;
  26.     private boolean m_forcePhysicalPath;
  27.     private String m_contentDisposition;
  28.     public static final int SAVE_AUTO = 0;
  29.     public static final int SAVE_VIRTUAL = 1;
  30.     public static final int SAVE_PHYSICAL = 2;
  31.     private Files m_files;
  32.     private Request m_formRequest;
  33. public SmartUpload()
  34. {
  35.     m_totalBytes = 0;
  36.     m_currentIndex = 0;
  37.     m_startData = 0;
  38.     m_endData = 0;
  39.     m_boundary = new String();
  40.     m_totalMaxFileSize = 0L;
  41.     m_maxFileSize = 0L;
  42.     m_deniedFilesList = new Vector();
  43.     m_allowedFilesList = new Vector();
  44.     m_denyPhysicalPath = false;
  45.     m_forcePhysicalPath = false;
  46.     m_contentDisposition = new String();
  47.     m_files = new Files();
  48.     m_formRequest = new Request();
  49. }
  50. public void downloadField(
  51.     ResultSet rs,
  52.     String columnName,
  53.     String contentType,
  54.     String destFileName)
  55.     throws SQLException, IOException, ServletException
  56. {
  57.     if (rs == null)
  58.         throw new IllegalArgumentException("The RecordSet cannot be null (1045).");
  59.     if (columnName == null)
  60.         throw new IllegalArgumentException("The columnName cannot be null (1050).");
  61.     if (columnName.length() == 0)
  62.         throw new IllegalArgumentException("The columnName cannot be empty (1055).");
  63.     byte b[] = rs.getBytes(columnName);
  64.     if (contentType == null)
  65.         m_response.setContentType("application/x-msdownload");
  66.     else if (contentType.length() == 0)
  67.         m_response.setContentType("application/x-msdownload");
  68.     else
  69.         m_response.setContentType(contentType);
  70.     m_response.setContentLength(b.length);
  71.     if (destFileName == null)
  72.         m_response.setHeader("Content-Disposition", "attachment;");
  73.     else if (destFileName.length() == 0)
  74.         m_response.setHeader("Content-Disposition", "attachment;");
  75.     else
  76.         m_response.setHeader(
  77.             "Content-Disposition",
  78.             "attachment; filename=".concat(String.valueOf(destFileName)));
  79.     m_response.getOutputStream().write(b, 0, b.length);
  80. }
  81. public void downloadFile(String sourceFilePathName)
  82.     throws SmartUploadException, IOException, ServletException
  83. {
  84.     downloadFile(sourceFilePathName, null, null);
  85. }
  86. public void downloadFile(String sourceFilePathName, String contentType)
  87.     throws SmartUploadException, IOException, ServletException
  88. {
  89.     downloadFile(sourceFilePathName, contentType, null);
  90. }
  91. public void downloadFile(
  92.     String sourceFilePathName,
  93.     String contentType,
  94.     String destFileName)
  95.     throws SmartUploadException, IOException, ServletException
  96. {
  97.     downloadFile(sourceFilePathName, contentType, destFileName, 65000);
  98. }
  99. public void downloadFile(
  100.     String sourceFilePathName,
  101.     String contentType,
  102.     String destFileName,
  103.     int blockSize)
  104.     throws SmartUploadException, IOException, ServletException
  105. {
  106.     if (sourceFilePathName == null)
  107.         throw new IllegalArgumentException(
  108.             String.valueOf(
  109.                 (new StringBuffer("File '")).append(sourceFilePathName).append(
  110.                     "' not found (1040).")));
  111.     if (sourceFilePathName.equals(""))
  112.         throw new IllegalArgumentException(
  113.             String.valueOf(
  114.                 (new StringBuffer("File '")).append(sourceFilePathName).append(
  115.                     "' not found (1040).")));
  116.     if (!isVirtual(sourceFilePathName) && m_denyPhysicalPath)
  117.         throw new SecurityException("Physical path is denied (1035).");
  118.     if (isVirtual(sourceFilePathName))
  119.         sourceFilePathName = m_application.getRealPath(sourceFilePathName);
  120.     java.io.File file = new java.io.File(sourceFilePathName);
  121.     FileInputStream fileIn = new FileInputStream(file);
  122.     long fileLen = file.length();
  123.     int readBytes = 0;
  124.     int totalRead = 0;
  125.     byte b[] = new byte[blockSize];
  126.     if (contentType == null)
  127.         m_response.setContentType("application/x-msdownload");
  128.     else if (contentType.length() == 0)
  129.         m_response.setContentType("application/x-msdownload");
  130.     else
  131.         m_response.setContentType(contentType);
  132.     m_response.setContentLength((int) fileLen);
  133.     m_contentDisposition =
  134.         m_contentDisposition != null ? m_contentDisposition : "attachment;";
  135.     if (destFileName == null)
  136.         m_response.setHeader(
  137.             "Content-Disposition",
  138.             String.valueOf(
  139.                 (new StringBuffer(String.valueOf(m_contentDisposition)))
  140.                     .append(" filename=")
  141.                     .append(getFileName(sourceFilePathName))));
  142.     else if (destFileName.length() == 0)
  143.         m_response.setHeader("Content-Disposition", m_contentDisposition);
  144.     else
  145.         m_response.setHeader(
  146.             "Content-Disposition",
  147.             String.valueOf(
  148.                 (new StringBuffer(String.valueOf(m_contentDisposition)))
  149.                     .append(" filename=")
  150.                     .append(destFileName)));
  151.     while ((long) totalRead < fileLen)
  152.     {
  153.         readBytes = fileIn.read(b, 0, blockSize);
  154.         totalRead += readBytes;
  155.         m_response.getOutputStream().write(b, 0, readBytes);
  156.     }
  157.     fileIn.close();
  158. }
  159. public void fieldToFile(
  160.     ResultSet rs,
  161.     String columnName,
  162.     String destFilePathName)
  163.     throws SQLException, SmartUploadException, IOException, ServletException
  164. {
  165.     try
  166.     {
  167.         if (m_application.getRealPath(destFilePathName) != null)
  168.             destFilePathName = m_application.getRealPath(destFilePathName);
  169.         InputStream is_data = rs.getBinaryStream(columnName);
  170.         FileOutputStream file = new FileOutputStream(destFilePathName);
  171.         int c;
  172.         while ((c = is_data.read()) != -1)
  173.             file.write(c);
  174.         file.close();
  175.     }
  176.     catch (Exception e)
  177.     {
  178.         throw new SmartUploadException("Unable to save file from the DataBase (1020).");
  179.     }
  180. }
  181. public byte getBinaryData(int index)
  182. {
  183.     byte retval;
  184.     try
  185.     {
  186.         retval = m_binArray[index];
  187.     }
  188.     catch (Exception e)
  189.     {
  190.         throw new ArrayIndexOutOfBoundsException("Index out of range (1005).");
  191.     }
  192.     return retval;
  193. }
  194. private String getContentDisp(String dataHeader)
  195. {
  196.     String value = new String();
  197.     int start = 0;
  198.     int end = 0;
  199.     start = dataHeader.indexOf(":") + 1;
  200.     end = dataHeader.indexOf(";");
  201.     value = dataHeader.substring(start, end);
  202.     return value;
  203. }
  204. private String getContentType(String dataHeader)
  205. {
  206.     String token = new String();
  207.     String value = new String();
  208.     int start = 0;
  209.     int end = 0;
  210.     token = "Content-Type:";
  211.     start = dataHeader.indexOf(token) + token.length();
  212.     if (start != -1)
  213.     {
  214.         end = dataHeader.length();
  215.         value = dataHeader.substring(start, end);
  216.     }
  217.     return value;
  218. }
  219. private String getDataFieldValue(String dataHeader, String fieldName)
  220. {
  221.     String token = new String();
  222.     String value = new String();
  223.     int pos = 0;
  224.     int i = 0;
  225.     int start = 0;
  226.     int end = 0;
  227.     token =
  228.         String.valueOf(
  229.             (new StringBuffer(String.valueOf(fieldName))).append("=").append('"'));
  230.     pos = dataHeader.indexOf(token);
  231.     if (pos > 0)
  232.     {
  233.         i = pos + token.length();
  234.         start = i;
  235.         token = """;
  236.         end = dataHeader.indexOf(token, i);
  237.         if (start > 0 && end > 0)
  238.             value = dataHeader.substring(start, end);
  239.     }
  240.     return value;
  241. }
  242. private String getDataHeader()
  243. {
  244.     int start = m_currentIndex;
  245.     int end = 0;
  246.     int len = 0;
  247.     boolean found = false;
  248.     while (!found)
  249.         if (m_binArray[m_currentIndex] == 13 && m_binArray[m_currentIndex + 2] == 13)
  250.         {
  251.             found = true;
  252.             end = m_currentIndex - 1;
  253.             m_currentIndex = m_currentIndex + 2;
  254.         }
  255.         else
  256.         {
  257.             m_currentIndex++;
  258.         }
  259.     String dataHeader = new String(m_binArray, start, (end - start) + 1);
  260.     return dataHeader;
  261. }
  262. private void getDataSection()
  263. {
  264.     boolean found = false;
  265.     String dataHeader = new String();
  266.     int searchPos = m_currentIndex;
  267.     int keyPos = 0;
  268.     int boundaryLen = m_boundary.length();
  269.     m_startData = m_currentIndex;
  270.     m_endData = 0;
  271.     do {
  272.         if (searchPos >= m_totalBytes)
  273.             break;
  274.         if (m_binArray[searchPos] == (byte) m_boundary.charAt(keyPos))
  275.         {
  276.             if (keyPos == boundaryLen - 1)
  277.             {
  278.                 m_endData = ((searchPos - boundaryLen) + 1) - 3;
  279.                 break;
  280.             }
  281.             searchPos++;
  282.             keyPos++;
  283.         }
  284.         else
  285.         {
  286.             searchPos++;
  287.             keyPos = 0;
  288.         }
  289.     }
  290.     while (true);
  291.     m_currentIndex = m_endData + boundaryLen + 3;
  292. }
  293. private String getFileExt(String fileName)
  294. {
  295.     String value = new String();
  296.     int start = 0;
  297.     int end = 0;
  298.     if (fileName == null)
  299.         return null;
  300.     start = fileName.lastIndexOf(46) + 1;
  301.     end = fileName.length();
  302.     value = fileName.substring(start, end);
  303.     if (fileName.lastIndexOf(46) > 0)
  304.         return value;
  305.     else
  306.         return "";
  307. }
  308. private String getFileName(String filePathName)
  309. {
  310.     String token = new String();
  311.     String value = new String();
  312.     int pos = 0;
  313.     int i = 0;
  314.     int start = 0;
  315.     int end = 0;
  316.     pos = filePathName.lastIndexOf(47);
  317.     if (pos != -1)
  318.         return filePathName.substring(pos + 1, filePathName.length());
  319.     pos = filePathName.lastIndexOf(92);
  320.     if (pos != -1)
  321.         return filePathName.substring(pos + 1, filePathName.length());
  322.     else
  323.         return filePathName;
  324. }
  325. public Files getFiles()
  326. {
  327.     return m_files;
  328. }
  329. protected String getPhysicalPath(String filePathName, int option)
  330.     throws IOException
  331. {
  332.     String path = new String();
  333.     String fileName = new String();
  334.     String fileSeparator = new String();
  335.     boolean isPhysical = false;
  336.     fileSeparator = System.getProperty("file.separator");
  337.     if (filePathName == null)
  338.         throw new IllegalArgumentException("There is no specified destination file (1140).");
  339.     if (filePathName.equals(""))
  340.         throw new IllegalArgumentException("There is no specified destination file (1140).");
  341.     if (filePathName.lastIndexOf("\") >= 0)
  342.     {
  343.         path = filePathName.substring(0, filePathName.lastIndexOf("\"));
  344.         fileName = filePathName.substring(filePathName.lastIndexOf("\") + 1);
  345.     }
  346.     if (filePathName.lastIndexOf("/") >= 0)
  347.     {
  348.         path = filePathName.substring(0, filePathName.lastIndexOf("/"));
  349.         fileName = filePathName.substring(filePathName.lastIndexOf("/") + 1);
  350.     }
  351.     path = path.length() != 0 ? path : "/";
  352.     java.io.File physicalPath = new java.io.File(path);
  353.     if (physicalPath.exists())
  354.         isPhysical = true;
  355.     if (option == 0)
  356.     {
  357.         if (isVirtual(path))
  358.         {
  359.             path = m_application.getRealPath(path);
  360.             if (path.endsWith(fileSeparator))
  361.                 path = path + fileName;
  362.             else
  363.                 path =
  364.                     String.valueOf(
  365.                         (new StringBuffer(String.valueOf(path))).append(fileSeparator).append(
  366.                             fileName));
  367.             return path;
  368.         }
  369.         if (isPhysical)
  370.         {
  371.             if (m_denyPhysicalPath)
  372.                 throw new IllegalArgumentException("Physical path is denied (1125).");
  373.             else
  374.                 return filePathName;
  375.         }
  376.         else
  377.         {
  378.             throw new IllegalArgumentException("This path does not exist (1135).");
  379.         }
  380.     }
  381.     if (option == 1)
  382.     {
  383.         if (isVirtual(path))
  384.         {
  385.             path = m_application.getRealPath(path);
  386.             if (path.endsWith(fileSeparator))
  387.                 path = path + fileName;
  388.             else
  389.                 path =
  390.                     String.valueOf(
  391.                         (new StringBuffer(String.valueOf(path))).append(fileSeparator).append(
  392.                             fileName));
  393.             return path;
  394.         }
  395.         if (isPhysical)
  396.             throw new IllegalArgumentException("The path is not a virtual path.");
  397.         else
  398.             throw new IllegalArgumentException("This path does not exist (1135).");
  399.     }
  400.     if (option == 2)
  401.     {
  402.         if (isPhysical)
  403.             if (m_denyPhysicalPath)
  404.                 throw new IllegalArgumentException("Physical path is denied (1125).");
  405.             else
  406.                 return filePathName;
  407.         if (isVirtual(path))
  408.             throw new IllegalArgumentException("The path is not a physical path.");
  409.         else
  410.             throw new IllegalArgumentException("This path does not exist (1135).");
  411.     }
  412.     else
  413.     {
  414.         return null;
  415.     }
  416. }
  417. public Request getRequest()
  418. {
  419.     return m_formRequest;
  420. }
  421. public int getSize()
  422. {
  423.     return m_totalBytes;
  424. }
  425. private String getSubTypeMIME(String ContentType)
  426. {
  427.     String value = new String();
  428.     int start = 0;
  429.     int end = 0;
  430.     start = ContentType.indexOf("/") + 1;
  431.     if (start != -1)
  432.     {
  433.         end = ContentType.length();
  434.         return ContentType.substring(start, end);
  435.     }
  436.     else
  437.     {
  438.         return ContentType;
  439.     }
  440. }
  441. private String getTypeMIME(String ContentType)
  442. {
  443.     String value = new String();
  444.     int pos = 0;
  445.     pos = ContentType.indexOf("/");
  446.     if (pos != -1)
  447.         return ContentType.substring(1, pos);
  448.     else
  449.         return ContentType;
  450. }
  451. public final void init(ServletConfig config) throws ServletException
  452. {
  453.     m_application = config.getServletContext();
  454. }
  455. public final void initialize(PageContext pageContext) throws ServletException
  456. {
  457.     m_application = pageContext.getServletContext();
  458.     m_request = (HttpServletRequest) pageContext.getRequest();
  459.     m_response = (HttpServletResponse) pageContext.getResponse();
  460. }
  461. public final void initialize(
  462.     ServletConfig config,
  463.     HttpServletRequest request,
  464.     HttpServletResponse response)
  465.     throws ServletException
  466. {
  467.     m_application = config.getServletContext();
  468.     m_request = request;
  469.     m_response = response;
  470. }
  471. public final void initialize(
  472.     ServletContext application,
  473.     HttpSession session,
  474.     HttpServletRequest request,
  475.     HttpServletResponse response,
  476.     JspWriter out)
  477.     throws ServletException
  478. {
  479.     m_application = application;
  480.     m_request = request;
  481.     m_response = response;
  482. }
  483. private boolean isVirtual(String pathName)
  484. {
  485.     if (m_application.getRealPath(pathName) != null)
  486.     {
  487.         java.io.File virtualFile =
  488.             new java.io.File(m_application.getRealPath(pathName));
  489.         return virtualFile.exists();
  490.     }
  491.     else
  492.     {
  493.         return false;
  494.     }
  495. }
  496. public int save(String destPathName)
  497.     throws SmartUploadException, IOException, ServletException
  498. {
  499.     return save(destPathName, 0);
  500. }
  501. public int save(String destPathName, int option)
  502.     throws SmartUploadException, IOException, ServletException
  503. {
  504.     int count = 0;
  505.     if (destPathName == null)
  506.         destPathName = m_application.getRealPath("/");
  507.     if (destPathName.indexOf("/") != -1)
  508.     {
  509.         if (destPathName.charAt(destPathName.length() - 1) != '/')
  510.             destPathName = String.valueOf(destPathName).concat("/");
  511.     }
  512.     else if (destPathName.charAt(destPathName.length() - 1) != '\')
  513.         destPathName = String.valueOf(destPathName).concat("\");
  514.     for (int i = 0; i < m_files.getCount(); i++)
  515.         if (!m_files.getFile(i).isMissing())
  516.         {
  517.             m_files.getFile(i).saveAs(
  518.                 destPathName + m_files.getFile(i).getFileName(),
  519.                 option);
  520.             count++;
  521.         }
  522.     return count;
  523. }
  524. public void service(HttpServletRequest request, HttpServletResponse response)
  525.     throws IOException, ServletException
  526. {
  527.     m_request = request;
  528.     m_response = response;
  529. }
  530. public void setAllowedFilesList(String allowedFilesList)
  531. {
  532.     String ext = "";
  533.     if (allowedFilesList != null)
  534.     {
  535.         ext = "";
  536.         for (int i = 0; i < allowedFilesList.length(); i++)
  537.             if (allowedFilesList.charAt(i) == ',')
  538.             {
  539.                 if (!m_allowedFilesList.contains(ext))
  540.                     m_allowedFilesList.addElement(ext);
  541.                 ext = "";
  542.             }
  543.             else
  544.             {
  545.                 ext = ext + allowedFilesList.charAt(i);
  546.             }
  547.         if (ext != "")
  548.             m_allowedFilesList.addElement(ext);
  549.     }
  550.     else
  551.     {
  552.         m_allowedFilesList = null;
  553.     }
  554. }
  555. public void setContentDisposition(String contentDisposition)
  556. {
  557.     m_contentDisposition = contentDisposition;
  558. }
  559. public void setDeniedFilesList(String deniedFilesList)
  560.     throws SQLException, IOException, ServletException
  561. {
  562.     String ext = "";
  563.     if (deniedFilesList != null)
  564.     {
  565.         ext = "";
  566.         for (int i = 0; i < deniedFilesList.length(); i++)
  567.             if (deniedFilesList.charAt(i) == ',')
  568.             {
  569.                 if (!m_deniedFilesList.contains(ext))
  570.                     m_deniedFilesList.addElement(ext);
  571.                 ext = "";
  572.             }
  573.             else
  574.             {
  575.                 ext = ext + deniedFilesList.charAt(i);
  576.             }
  577.         if (ext != "")
  578.             m_deniedFilesList.addElement(ext);
  579.     }
  580.     else
  581.     {
  582.         m_deniedFilesList = null;
  583.     }
  584. }
  585. public void setDenyPhysicalPath(boolean deny)
  586. {
  587.     m_denyPhysicalPath = deny;
  588. }
  589. public void setForcePhysicalPath(boolean force)
  590. {
  591.     m_forcePhysicalPath = force;
  592. }
  593. public void setMaxFileSize(long maxFileSize)
  594. {
  595.     m_maxFileSize = maxFileSize;
  596. }
  597. public void setTotalMaxFileSize(long totalMaxFileSize)
  598. {
  599.     m_totalMaxFileSize = totalMaxFileSize;
  600. }
  601. public void upload() throws SmartUploadException, IOException, ServletException
  602. {
  603.     int totalRead = 0;
  604.     int readBytes = 0;
  605.     long totalFileSize = 0L;
  606.     boolean found = false;
  607.     String dataHeader = new String();
  608.     String fieldName = new String();
  609.     String fileName = new String();
  610.     String fileExt = new String();
  611.     String filePathName = new String();
  612.     String contentType = new String();
  613.     String contentDisp = new String();
  614.     String typeMIME = new String();
  615.     String subTypeMIME = new String();
  616.     boolean isFile = false;
  617.     m_totalBytes = m_request.getContentLength();
  618.     m_binArray = new byte[m_totalBytes];
  619.     for (; totalRead < m_totalBytes; totalRead += readBytes)
  620.         try
  621.         {
  622.             m_request.getInputStream();
  623.             readBytes =
  624.                 m_request.getInputStream().read(
  625.                     m_binArray,
  626.                     totalRead,
  627.                     m_totalBytes - totalRead);
  628.         }
  629.         catch (Exception e)
  630.         {
  631.             throw new SmartUploadException("Unable to upload.");
  632.         }
  633.     for (; !found && m_currentIndex < m_totalBytes; m_currentIndex++)
  634.         if (m_binArray[m_currentIndex] == 13)
  635.             found = true;
  636.         else
  637.             m_boundary = m_boundary + (char) m_binArray[m_currentIndex];
  638.     if (m_currentIndex == 1)
  639.         return;
  640.     m_currentIndex++;
  641.     do {
  642.         if (m_currentIndex >= m_totalBytes)
  643.             break;
  644.         dataHeader = getDataHeader();
  645.         m_currentIndex = m_currentIndex + 2;
  646.         isFile = dataHeader.indexOf("filename") > 0;
  647.         fieldName = getDataFieldValue(dataHeader, "name");
  648.         if (isFile)
  649.         {
  650.             filePathName = getDataFieldValue(dataHeader, "filename");
  651.             fileName = getFileName(filePathName);
  652.             fileExt = getFileExt(fileName);
  653.             contentType = getContentType(dataHeader);
  654.             contentDisp = getContentDisp(dataHeader);
  655.             typeMIME = getTypeMIME(contentType);
  656.             subTypeMIME = getSubTypeMIME(contentType);
  657.         }
  658.         getDataSection();
  659.         if (isFile && fileName.length() > 0)
  660.         {
  661.             if (m_deniedFilesList.contains(fileExt))
  662.                 throw new SecurityException("上传文件中含有服务器拒绝上传的文件类型 (1015).");
  663.             if (!m_allowedFilesList.isEmpty() && !m_allowedFilesList.contains(fileExt))
  664.                 throw new SecurityException("上传文件中含有服务器不允许上传的文件类型 (1010).");
  665.             if (m_maxFileSize > (long) 0
  666.                 && (long) ((m_endData - m_startData) + 1) > m_maxFileSize)
  667.                 throw new SecurityException(
  668.                     String.valueOf(
  669.                         (new StringBuffer("文件 ")).append(fileName).append(
  670.                             " 大小超过服务器允许上传文件的最大值 (1105).")));
  671.             totalFileSize += (m_endData - m_startData) + 1;
  672.             if (m_totalMaxFileSize > (long) 0 && totalFileSize > m_totalMaxFileSize)
  673.                 throw new SecurityException("文件总大小超过服务器允许上传文件的最大值 (1110).");
  674.         }
  675.         if (isFile)
  676.         {
  677.             com.jspsmart.upload.File newFile = new com.jspsmart.upload.File();
  678.             newFile.setParent(this);
  679.             newFile.setFieldName(fieldName);
  680.             newFile.setFileName(fileName);
  681.             newFile.setFileExt(fileExt);
  682.             newFile.setFilePathName(filePathName);
  683.             newFile.setIsMissing(filePathName.length() == 0);
  684.             newFile.setContentType(contentType);
  685.             newFile.setContentDisp(contentDisp);
  686.             newFile.setTypeMIME(typeMIME);
  687.             newFile.setSubTypeMIME(subTypeMIME);
  688.             if (contentType.indexOf("application/x-macbinary") > 0)
  689.                 m_startData = m_startData + 128;
  690.             newFile.setSize((m_endData - m_startData) + 1);
  691.             newFile.setStartData(m_startData);
  692.             newFile.setEndData(m_endData);
  693.             m_files.addFile(newFile);
  694.         }
  695.         else
  696.         {
  697.             String value =
  698.                 new String(m_binArray, m_startData, (m_endData - m_startData) + 1);
  699.             m_formRequest.putParameter(fieldName, value);
  700.         }
  701.         if ((char) m_binArray[m_currentIndex + 1] == '-')
  702.             break;
  703.         m_currentIndex = m_currentIndex + 2;
  704.     }
  705.     while (true);
  706. }
  707. public void uploadInFile(String destFilePathName)
  708.     throws SmartUploadException, IOException
  709. {
  710.     int intsize = 0;
  711.     int pos = 0;
  712.     int readBytes = 0;
  713.     if (destFilePathName == null)
  714.         throw new IllegalArgumentException("There is no specified destination file (1025).");
  715.     if (destFilePathName.length() == 0)
  716.         throw new IllegalArgumentException("There is no specified destination file (1025).");
  717.     if (!isVirtual(destFilePathName) && m_denyPhysicalPath)
  718.         throw new SecurityException("Physical path is denied (1035).");
  719.     intsize = m_request.getContentLength();
  720.     m_binArray = new byte[intsize];
  721.     for (; pos < intsize; pos += readBytes)
  722.         try
  723.         {
  724.             readBytes = m_request.getInputStream().read(m_binArray, pos, intsize - pos);
  725.         }
  726.         catch (Exception e)
  727.         {
  728.             throw new SmartUploadException("Unable to upload.");
  729.         }
  730.     if (isVirtual(destFilePathName))
  731.         destFilePathName = m_application.getRealPath(destFilePathName);
  732.     try
  733.     {
  734.         java.io.File file = new java.io.File(destFilePathName);
  735.         FileOutputStream fileOut = new FileOutputStream(file);
  736.         fileOut.write(m_binArray);
  737.         fileOut.close();
  738.     }
  739.     catch (Exception e)
  740.     {
  741.         throw new SmartUploadException("The Form cannot be saved in the specified file (1030).");
  742.     }
  743. }
  744. }