<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      談一下文件上傳

      [摘要]在這里看到很多討論文件上傳的文章,覺得各有利敝,有些只限于上傳文件,而不能同時取得文本字段值,尤其是上傳多個文件比較少,現本人做這個上傳文件的類最多可支持上傳255個文件,同時可取得文本字段值,請各...
      在這里看到很多討論文件上傳的文章,覺得各有利敝,有些只限于上傳文件,而不能同時取得文本字段值,尤其是上傳多個文件比較少,現本人做這個上傳文件的類最多可支持上傳255個文件,同時可取得文本字段值,請各位高手指正.

      文件上傳類:MoqUploadBean.java
      package net.jspcn.tool;

      import java.io.*;

      import java.util.*;

      import javax.servlet.*;

      import javax.servlet.http.*;

      /**

      *

      * Title: 文件上傳類

      * Description: 既能對文件進行上傳,又能取得輸入框的值,最多可同時上傳255個文件

      * Copyright: Copyright (c) 2002

      * Company: Tekson

      * @author 莫瓊

      * @version 1.0

      */

      public class UploadBean {

      private String[] sourceFile = new String[255]; //源文件名

      private String[] suffix = new String[255]; //文件后綴名

      private String canSuffix = ".gif.jpg.jpeg.png"; //可上傳的文件后綴名

      private String objectPath = "c:/"; //目標文件目錄

      private String[] objectFileName = new String[255]; //目標文件名

      private ServletInputStream sis = null; //輸入流

      private String[] description = new String[255]; //描述狀態

      private long size = 100 * 1024; //限制大小

      private int count = 0; //已傳輸文件數目

      private byte[] b = new byte[4096]; //字節流存放數組

      private boolean successful = true;

      private Hashtable fields = new Hashtable();

      public UploadBean() {

      }

      //設置上傳文件的后綴名

      public void setSuffix(String canSuffix) {

      this.canSuffix = canSuffix;

      }

      //設置文件保存路徑

      public void setObjectPath(String objectPath) {

      this.objectPath = objectPath;

      }

      //設置文件保存路徑

      public void setSize(long maxSize) {

      this.size = maxSize;

      }

      //文件上傳處理程序

      public void setSourceFile(HttpServletRequest request) throws IOException {

      sis = request.getInputStream();

      int a = 0;

      int k = 0;

      String s = "";

      while ( (a = sis.readLine(b, 0, b.length)) != -1) {

      s = new String(b, 0, a);

      if ( (k = s.indexOf("filename=\"")) != -1) {

      // 取得文件數據

      s = s.substring(k + 10);

      k = s.indexOf("\"");

      s = s.substring(0, k);

      sourceFile[count] = s;

      k = s.lastIndexOf(".");

      suffix[count] = s.substring(k + 1);

      if (canTransfer(count)) {

      transferFile(count);

      }

      ++count;

      } else if ( (k = s.indexOf("name=\"")) != -1) {

      // 普通表單輸入元素,獲取輸入元素名字

      String fieldName = s.substring(k+6, s.length()-3);

      sis.readLine(b, 0, b.length);

      StringBuffer fieldValue = new StringBuffer(b.length);

      while ( (a = sis.readLine(b, 0, b.length)) != -1) {

      s = new String(b, 0, a-2);

      if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) {

      break;

      } else {

      fieldValue.append(s);

      }

      }

      fields.put(fieldName, fieldValue.toString());

      }

      if (!successful)

      break;

      }

      }

      //取得表單元素值

      public String getFieldValue(String fieldName) {

      if (fields == null fieldName == null) {

      return null;

      }

      return (String) fields.get(fieldName);

      }

      //取得上傳文件數

      public int getCount() {

      return count;

      }

      //取得目標路徑

      public String getObjectPath() {

      return objectPath;

      }

      //取得源文件名

      public String[] getSourceFile() {

      return sourceFile;

      }

      //取得目標文件名

      public String[] getObjectFileName() {

      return objectFileName;

      }

      //取得上傳狀態描述

      public String[] getDescription() {

      return description;

      }

      //判斷上傳文件的類型

      private boolean canTransfer(int i) {

      suffix[i] = suffix[i].toLowerCase();

      //這個是用來傳圖片的,各位可以把后綴名改掉或者不要這個條件

      if (sourceFile[i].equals("") (!(canSuffix.indexOf("."+suffix[i])>=0))) {

      description[i] = "ERR: File suffix is wrong.";

      return false;

      }

      else {

      return true;

      }

      }

      //上傳文件轉換

      private void transferFile(int i) {

      String x = Long.toString(new java.util.Date().getTime());

      try {

      objectFileName[i] = x + "." + suffix[i];

      FileOutputStream out = new FileOutputStream(objectPath + objectFileName[i]);

      int a = 0;

      int k = 0;

      long hastransfered = 0; //標示已經傳輸的字節數

      String s = "";

      while ( (a = sis.readLine(b, 0, b.length)) != -1) {

      s = new String(b, 0, a);

      if ( (k = s.indexOf("Content-Type:")) != -1) {

      break;

      }

      }

      sis.readLine(b, 0, b.length);

      while ( (a = sis.readLine(b, 0, b.length)) != -1) {

      s = new String(b, 0, a);

      if ( (b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) {

      break;

      }

      out.write(b, 0, a);

      hastransfered += a;

      if (hastransfered >= size) {

      description[count] = "ERR: The file " + sourceFile[count] +

      " is too large to transfer. The whole process is interrupted.";

      successful = false;

      break;

      }

      }

      if (successful) {

      description[count] = "Right: The file " + sourceFile[count] +

      " has been transfered successfully.";

      }

      out.close();

      if (!successful) {

      sis.close();

      File tmp = new File(objectPath + objectFileName[count]);

      tmp.delete();

      }

      }

      catch (IOException ioe) {

      description[i] = ioe.toString();

      }

      }

      public static void main(String[] args) {

      System.out.println("Test OK");

      }

      }


      文件上傳調用:MoqUpload.jsp
      〈%@ page contentType="text/html; charset=GB2312" %>

      〈html>

      〈head>

      〈title>文件上載〈/title>

      〈/head>

      〈body>

      〈form action="MoqUploadSubmit.jsp" enctype="MULTIPART/FORM-DATA" method="post">

      作者姓名:〈input type="text" name="Author" />

      〈br />

      公司名稱:〈input type="text" name="Company" />

      〈br />

      文件描述:〈input type="text" name="Comment" />

      〈br />

      選擇文件1:〈input type="file" name="filename1" />

      〈br />

      選擇文件2:〈input type="file" name="filename2" />

      〈br />

      選擇文件3:〈input type="file" name="filename3" />

      〈br />

      選擇文件4:〈input type="file" name="filename4" />

      〈br />

      〈input type="submit" value="上載" />

      〈/form>

      〈/body>

      〈/html>


      文件上傳提交:MoqUploadSubmit.jsp
      〈%@ page contentType="text/html;charset=gb2312"%>

      〈jsp:useBean id="fileBean" scope="page" class="net.moq.www.MoqUploadBean" />

      〈%

      fileBean.setObjectPath("D:\\Temp\\");

      fileBean.setSize(10000*1024);

      fileBean.setSuffix(".gif.jpg.png.jpge.html.htm");

      fileBean.setSourceFile(request);

      String [] saSourceFile = fileBean.getSourceFile();

      String [] saObjectFile = fileBean.getObjectFileName();

      String [] saDescription = fileBean.getDescription();

      int iCount = fileBean.getCount();

      String sObjectPath = fileBean.getObjectPath();

      for(int i=0;i〈iCount;i++) {

      out.println("〈br>源始文件:");

      out.println(saSourceFile[i]);

      out.println("〈br>目標文件:");

      out.println(sObjectPath+saObjectFile[i]);

      out.println("〈br>上傳說明:");

      out.println(saDescription[i]);

      out.println("〈br>");

      }

      out.println("〈br>作者:" + fileBean.getFieldValue("Author"));

      out.println("〈br>公司:" + fileBean.getFieldValue("Company"));

      out.println("〈br>說明:" + fileBean.getFieldValue("Comment"));

      %>


      日韩精品一区二区三区高清