当前位置:  技术问答>java相关

文件上传的同时,怎样才能接收其它文本内容

    来源: 互联网  发布时间:2015-03-10

    本文导语:       最近写一个程序,一个页面中有上传和文本框输入内容,现在要上传和文本内容同时接收,但遇到两者不能同时接收的问题,我的页面中设置有上传用的类型.请问有哪位高手能告诉我怎样解决这个问题? ...

     最近写一个程序,一个页面中有上传和文本框输入内容,现在要上传和文本内容同时接收,但遇到两者不能同时接收的问题,我的页面中设置有上传用的类型.请问有哪位高手能告诉我怎样解决这个问题?

|
如果页面设置为上传类型,使用form提交的方式是无法得到当前页面的参数值的
你需要分析当前页面的输入流来获得,你可以看看下面的程序,直接使用multiRequest.getParameter("你定义的文本框名");即可取回

// Copyright (C) 1998 by Jason Hunter .  All rights reserved.
// Use of this class is limited.  Please see the LICENSE for more information.

package com.oreilly.servlet;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import java.lang.*;
import javax.servlet.http.*;

/**
* A utility class to handle multipart/form-data requests,
* the kind of requests that support file uploads.  This class can
* receive arbitrarily large files (up to an artificial limit you can set),
* and fairly efficiently too.
* It cannot handle nested data (multipart content within multipart content)
* or internationalized content (such as non Latin-1 filenames).


* It's used like this:


* MultipartRequest multi = new MultipartRequest(req, ".");
*  
* out.println("Params:");
* Enumeration params = multi.getParameterNames();
* while (params.hasMoreElements()) {
*  String name = (String)params.nextElement();
*  String value = multi.getParameter(name);
*  out.println(name + " = " + value);
* }
* out.println();
*  
* out.println("Files:");
* Enumeration files = multi.getFileNames();
* while (files.hasMoreElements()) {
*  String name = (String)files.nextElement();
*  String filename = multi.getFilesystemName(name);
*  String type = multi.getContentType(name);
*  File f = multi.getFile(name);
*  out.println("name: " + name);
*  out.println("filename: " + filename);
*  out.println("type: " + type);
*  if (f != null) {
*    out.println("f.toString(): " + f.toString());
*    out.println("f.getName(): " + f.getName());
*    out.println("f.exists(): " + f.exists());
*    out.println("f.length(): " + f.length());
*    out.println();
*  }
* }

*
* A client can upload files using an HTML form with the following structure.
* Note that not all browsers support file uploads.

* <FORM ACTION="/servlet/Handler/index.html" METHOD=POST
*          ENCTYPE="multipart/form-data">
* What is your name? <INPUT TYPE=TEXT NAME=submitter> <BR>
* Which file to upload? <INPUT TYPE=FILE NAME=file> <BR>
* <INPUT TYPE=SUBMIT>
* </FORM>


* The full file upload specification is contained in experimental RFC 1867,
* available at 
* http://www.ietf.org/rfc/rfc1867.txt.
*
* @author Jason Hunter, Copyright © 1998-1999
* @version 1.6, 00/03/19, better WebSphere 2.x/3.x content type workaround
* @version 1.5, 00/02/04, added auto MacBinary decoding for IE on Mac
* @version 1.4, 00/01/05, added getParameterValues(),
*                        WebSphere 2.x getContentType() workaround,
*                        stopped writing empty "unknown" file
* @version 1.3, 99/12/28, IE4 on Win98 lastIndexOf("boundary=") workaround
* @version 1.2, 99/12/20, IE4 on Mac readNextPart() workaround
* @version 1.1, 99/01/15, JSDK readLine() bug workaround
* @version 1.0, 98/09/18
*/
public class MultipartRequest {

  private static final int DEFAULT_MAX_POST_SIZE = 1024 * 1024 * 10;  // 1 Meg
  private static final String NO_FILE = "unknown";

  private HttpServletRequest req;
  private File dir=null;
  private int maxSize;
  private String tempFilename;  //add by lzl
  private boolean defaultFileFlag=false; //add by lzl
  private int fileNo=1; //add by lzl
  private Hashtable fileFullPaths; // add by wguzgg
  private Hashtable fileLengths;  //add by wguzgg
  private Hashtable fileLocalPaths; // add by wguzgg
  private Hashtable parameters = new Hashtable();  // name - Vector of values
  private Hashtable files = new Hashtable();      // name - UploadedFile


  //add by wguzgg
  public long getFileLengths(String fn) {
    Long fl=(Long)fileLengths.get(fn);
    return fl.longValue();
  }

  //add by wguzgg
  public String getFileFullPath(String fn) {
    String fp=(String)fileFullPaths.get(fn);
    return fp;
  }

  //add by wguzgg
  public String getFileLocalPath(String fn) {
    String flp=(String)fileLocalPaths.get(fn);
    return flp;
  }

  //add by lzl
  public MultipartRequest(HttpServletRequest request,String saveDirectory,boolean fileFlag) throws IOException {
    this(request, saveDirectory, DEFAULT_MAX_POST_SIZE,fileFlag);
  }

/**
  * Constructs a new MultipartRequest to handle the specified request,
  * saving any uploaded files to the given directory, and limiting the
  * upload size to 1 Megabyte.  If the content is too large, an
  * IOException is thrown.  This constructor actually parses the
  * multipart/form-data and throws an IOException if there's any
  * problem reading or parsing the request.
  *
  * @param request the servlet request
  * @param saveDirectory the directory in which to save any uploaded files
  * @exception IOException if the uploaded content is larger than 1 Megabyte
  * or there's a problem reading or parsing the request
  */
  public MultipartRequest(HttpServletRequest request,
                          String saveDirectory) throws IOException {
    this(request, saveDirectory, DEFAULT_MAX_POST_SIZE);
  }

  /**
  * Constructs a new MultipartRequest to handle the specified request,
  * saving any uploaded files to the given directory, and limiting the
  * upload size to the specified length.  If the content is too large, an
  * IOException is thrown.  This constructor actually parses the
  * multipart/form-data and throws an IOException if there's any
  * problem reading or parsing the request.
  *
  * @param request the servlet request
  * @param saveDirectory the directory in which to save any uploaded files
  * @param maxPostSize the maximum size of the POST content
  * @exception IOException if the uploaded content is larger than
  * maxPostSize or there's a problem reading or parsing the request
  */
  public MultipartRequest(HttpServletRequest request,
                          String saveDirectory,
                          int maxPostSize) throws IOException {
    // Sanity check values
    if (request == null)
      throw new IllegalArgumentException("request cannot be null");
    if (saveDirectory == null)
      throw new IllegalArgumentException("saveDirectory cannot be null");
    if (maxPostSize  type2.length() ? type1 : type2);
    }

    if (type == null ¦¦
        !type.toLowerCase().startsWith("multipart/form-data")) {
      throw new IOException("Posted content type isn't multipart/form-data");
    }
    // Get the boundary string; it's included in the content type.
    // Should look something like "------------------------12012133613061"
    String boundary = extractBoundary(type);
    if (boundary == null) {
      throw new IOException("Separation boundary was not specified");
    }

    // Construct the special input stream we'll read from
    MultipartInputStreamHandler in =
      new MultipartInputStreamHandler(req.getInputStream(), length);

    // Read the first line, should be the first boundary
    String line = in.readLine();
    if (line == null) {
      throw new IOException("Corrupt form data: premature ending");
    }

    // Verify that the line is the boundary
    if (!line.startsWith(boundary)) {
      throw new IOException("Corrupt form data: no leading boundary");
    }

    // Now that we're just beyond the first boundary, loop over each part
    boolean done = false;
    while (!done) {
      done = readNextPart(in, boundary);
    }
  }

  /**
  * A utility method that reads an individual part.  Dispatches to
  * readParameter() and readAndSaveFile() to do the actual work.  A
  * subclass can override this method for a better optimized or
  * differently behaved implementation.
  *
  * @param in the stream from which to read the part
  * @param boundary the boundary separating parts
  * @return a flag indicating whether this is the last part
  * @exception IOException if there's a problem reading or parsing the
  * request
  *
  * @see readParameter
  * @see readAndSaveFile
  */
  protected boolean readNextPart(MultipartInputStreamHandler in,
                                String boundary) throws IOException {
    // Read the first line, should look like this:
    // content-disposition: form-data; name="field1"; filename="file1.txt"
    String line = in.readLine();
    if (line == null) {
      // No parts left, we're done
      return true;
    }
    else if (line.length() == 0) {
      // IE4 on Mac sends an empty line at the end; treat that as the end.
      // Thanks to Daniel Lemire and Henri Tourigny for this fix.
      return true;
    }

    // Parse the content-disposition line
    String[] dispInfo = extractDispositionInfo(line);
    String disposition = dispInfo[0];
    String name = dispInfo[1];
    String filename =  dispInfo[2];

    // Now onto the next line.  This will either be empty
    // or contain a Content-Type and then an empty line.
    line = in.readLine();
    if (line == null) {
      // No parts left, we're done
      return true;
    }

    // Get the content type, or null if none specified
    String contentType = extractContentType(line);
    if (contentType != null) {
      // Eat the empty line
      line = in.readLine();
      if (line == null ¦¦ line.length() > 0) {  // line should be empty
        throw new
          IOException("Malformed line after content type: " + line);
      }
    }
    else {
      // Assume a default content type
      contentType = "application/octet-stream";
    }

    // Now, finally, we read the content (end after reading the boundary)
    if (filename == null) {
      // This is a parameter, add it to the vector of values
      String value = readParameter(in, boundary);
      if (value.equals("")) {
        value = null;  // treat empty strings like nulls
      }
      Vector existingValues = (Vector)parameters.get(name);
      if (existingValues == null) {
        existingValues = new Vector();
        parameters.put(name, existingValues);
      }
      existingValues.addElement(value);
    }
    else {
      // This is a file
      readAndSaveFile(in, boundary, filename, contentType,name);
      if (fileLocalPaths==null)                                      //add by wguzgg
        fileLocalPaths=new Hashtable();                              //add by wguzgg
      fileLocalPaths.put(new String(filename),dir.getAbsolutePath()); //add by wguzgg
      if (fileLengths==null)                                  //add by wguzgg
        fileLengths=new Hashtable();                          //add by wguzgg
      File f = new File(dir + File.separator + filename);    //add by wguzgg
      Long fileLength=new Long(f.length());                  //add by wguzgg
      fileLengths.put(new String(filename),fileLength);                  //add by wguzgg
      if (filename.equals(NO_FILE)) {
        files.put(name, new UploadedFile(null, null, null));
      }
      else {
        if(fileNo==1 && !defaultFileFlag){
          String fileType=filename.substring(filename.indexOf("."));
          filename=""+tempFilename+fileType.trim();
        }
        files.put(name,new UploadedFile(dir.toString(), filename, contentType));
        fileNo++;
      }
    }
    return false;  // there's more to read
  }

  /**
  * A utility method that reads a single part of the multipart request
  * that represents a parameter.  A subclass can override this method
  * for a better optimized or differently behaved implementation.
  *
  * @param in the stream from which to read the parameter information
  * @param boundary the boundary signifying the end of this part
  * @return the parameter value
  * @exception IOException if there's a problem reading or parsing the
  * request
  */
  protected String readParameter(MultipartInputStreamHandler in,
                                String boundary) throws IOException {
    StringBuffer sbuf = new StringBuffer();
    String line;

    while ((line = in.readLine()) != null) {
      if (line.startsWith(boundary)) break;
      sbuf.append(line + "rn");  // add the rn in case there are many lines
    }

    if (sbuf.length() == 0) {
      return null;  // nothing read
    }

    sbuf.setLength(sbuf.length() - 2);  // cut off the last line's rn
    return sbuf.toString();  // no URL decoding needed
  }

  /**
  * A utility method that reads a single part of the multipart request
  * that represents a file, and saves the file to the given directory.
  * A subclass can override this method for a better optimized or
  * differently behaved implementation.
  *
  * @param in the stream from which to read the file
  * @param boundary the boundary signifying the end of this part
  * @param dir the directory in which to save the uploaded file
  * @param filename the name under which to save the uploaded file
  * @exception IOException if there's a problem reading or parsing the
  * request
  */
  protected void readAndSaveFile(MultipartInputStreamHandler in,
                                String boundary,
                                String filename,
                                String contentType,
                                String name) throws IOException {
    OutputStream out = null;
    // A filename of NO_FILE means no file was sent, so just read to the
    // next boundary and ignore the empty contents
    if (filename.equals(NO_FILE)) {
      out = new ByteArrayOutputStream();  // write to nowhere
    }
    // A MacBinary file goes through a decoder
    else if (contentType.equals("application/x-macbinary")){
      File f = new File(dir + File.separator + filename);
      out = new MacBinaryDecoderOutputStream(
            new BufferedOutputStream(
            new FileOutputStream(f), 8 * 1024));
    }
    // A real file's contents are written to disk
    else {
      if(fileNo==1 && !defaultFileFlag){
        String fileType=filename.substring(filename.indexOf("."));
        filename=""+tempFilename+fileType.trim();
      }
      File f = new File(dir + File.separator + filename);
      out = new BufferedOutputStream(new FileOutputStream(f), 8 * 1024);
    }

    byte[] bbuf = new byte[100 * 1024];  // 100K
    int result;
    String line;

    // ServletInputStream.readLine() has the annoying habit of
    // adding a rn to the end of the last line.
    // Since we want a byte-for-byte transfer, we have to cut those chars.
    boolean rnflag = false;
    while ((result = in.readLine(bbuf, 0, bbuf.length)) != -1) {
      // Check for boundary
      if (result > 2 && bbuf[0] == '-' && bbuf[1] == '-') { // quick pre-check
        line = new String(bbuf, 0, result); //has edited by lzl
        if (line.startsWith(boundary)) break;
      }
      // Are we supposed to write rn for the last iteration?
      if (rnflag) {
        out.write('r'); out.write('n');
        rnflag = false;
      }
      // Write the buffer, postpone any ending rn
      if (result >= 2 &&
          bbuf[result - 2] == 'r' &&
          bbuf[result - 1] == 'n') {
        out.write(bbuf, 0, result - 2);  // skip the last 2 chars
        rnflag = true;  // make a note to write them on the next iteration
      }
      else {
        out.write(bbuf, 0, result);
      }
    }
    out.flush();
    out.close();
  }

  // Extracts and returns the boundary token from a line.
  //
  private String extractBoundary(String line) {
    // Use lastIndexOf() because IE 4.01 on Win98 has been known to send the
    // "boundary=" string multiple times.  Thanks to David Wall for this fix.
    int index = line.lastIndexOf("boundary=");
    if (index == -1) {
      return null;
    }
    String boundary = line.substring(index + 9);  // 9 for "boundary="

    // The real boundary is always preceeded by an extra "--"
    boundary = "--" + boundary;

    return boundary;
  }

  // Extracts and returns disposition info from a line, as a String array
  // with elements: disposition, name, filename.  Throws an IOException
  // if the line is malformatted.
  //
  private String[] extractDispositionInfo(String line) throws IOException {
    // Return the line's data as an array: disposition, name, filename
    String[] retval = new String[3];

    // Convert the line to a lowercase string without the ending rn
    // Keep the original line for error messages and for variable names.
    String origline = line;
    line = origline.toLowerCase();

    // Get the content disposition, should be "form-data"
    int start = line.indexOf("content-disposition: ");
    int end = line.indexOf(";");
    if (start == -1 ¦¦ end == -1) {
      throw new IOException("Content disposition corrupt: " + origline);
    }
    String disposition = line.substring(start + 21, end);
    if (!disposition.equals("form-data")) {
      throw new IOException("Invalid content disposition: " + disposition);
    }

    // Get the field name
    start = line.indexOf("name="", end);  // start at last semicolon
    end = line.indexOf(""", start + 7);  // skip name="
    if (start == -1 ¦¦ end == -1) {
      throw new IOException("Content disposition corrupt: " + origline);
    }
    String name = origline.substring(start + 6, end);

    // Get the filename, if given
    String filename = null;
    start = line.indexOf("filename="", end + 2);  // start after name
    end = line.indexOf(""", start + 10);          // skip filename="
    if (start != -1 && end != -1) {                // note the !=
      filename = origline.substring(start + 10, end);
      String temp=new String(filename);              //add by wguzgg
      // The filename may contain a full path.  Cut to just the filename.
      int slash =
        Math.max(filename.lastIndexOf('/'), filename.lastIndexOf('\'));
      if (slash > -1) {
        filename = filename.substring(slash + 1);  // past last slash
      }
      if (filename.equals("")) filename = NO_FILE; // sanity check
      if (fileFullPaths==null)                      //add by wguzgg
        fileFullPaths=new Hashtable();              //add by wguzgg
      fileFullPaths.put(new String(filename),temp);              //add by wguzgg
    }

    // Return a String array: disposition, name, filename
    retval[0] = disposition;
    retval[1] = name;
    retval[2] = filename;
    return retval;
  }

  // Extracts and returns the content type from a line, or null if the
  // line was empty.  Throws an IOException if the line is malformatted.
  //
  private String extractContentType(String line) throws IOException {
    String contentType = null;

    // Convert the line to a lowercase string
    String origline = line;
    line = origline.toLowerCase();

    // Get the content type, if any
    if (line.startsWith("content-type")) {
      int start = line.indexOf(" ");
      if (start == -1) {
        throw new IOException("Content type corrupt: " + origline);
      }
      contentType = line.substring(start + 1);
    }
    else if (line.length() != 0) {  // no content type, so should be empty
      throw new IOException("Malformed line after disposition: " + origline);
    }

    return contentType;
  }
}


// A class to hold information about an uploaded file.
//
class UploadedFile {

  private String dir;
  private String filename;
  private String type;

  UploadedFile(String dir, String filename, String type) {
    this.dir = dir;
    this.filename = filename;
    this.type = type;
  }

  public String getContentType() {
    return type;
  }

  public String getFilesystemName() {
    return filename;
  }

  public File getFile() {
    if (dir == null ¦¦ filename == null) {
      return null;
    }
    else {
      return new File(dir + File.separator + filename);
    }
  }
}


// A class to aid in reading multipart/form-data from a ServletInputStream.
// It keeps track of how many bytes have been read and detects when the
// Content-Length limit has been reached.  This is necessary since some
// servlet engines are slow to notice the end of stream.
//
// Mac users: The Mac doesn't like class names which exceed 32 characters
// (including the ".class") so while this class is usable from a JAR
// anywhere, it won't compile on a Mac.
//
class MultipartInputStreamHandler {

  ServletInputStream in;
  int totalExpected;
  int totalRead = 0;
  byte[] buf = new byte[8 * 1024];

  public MultipartInputStreamHandler(ServletInputStream in,
                                    int totalExpected) {
    this.in = in;
    this.totalExpected = totalExpected;
  }

  // Reads the next line of input.  Returns null to indicate the end
  // of stream.
  //
  public String readLine() throws IOException {
    StringBuffer sbuf = new StringBuffer();
    int result;
    String line;

    do {
      result = this.readLine(buf, 0, buf.length);  // this.readLine() does +=
      if (result != -1) {
        sbuf.append(new String(buf, 0, result)); //has edited by lzl
      }
    } while (result == buf.length);  // loop only if the buffer was filled

    if (sbuf.length() == 0) {
      return null;  // nothing read, must be at the end of stream
    }

    sbuf.setLength(sbuf.length() - 2);  // cut off the trailing rn
    return sbuf.toString();
  }

  // A pass-through to ServletInputStream.readLine() that keeps track
  // of how many bytes have been read and stops reading when the
  // Content-Length limit has been reached.
  //
  public int readLine(byte b[], int off, int len) throws IOException {
    if (totalRead >= totalExpected) {
      return -1;
    }
    else {
      if (len > (totalExpected - totalRead)) {
        len = totalExpected - totalRead;  // keep from reading off end
      }
      int result = in.readLine(b, off, len);
      if (result > 0) {
        totalRead += result;
      }
      return result;
    }
  }
}


// Class to filters MacBinary files to normal files on the fly
// Optimized for speed more than readability
class MacBinaryDecoderOutputStream extends FilterOutputStream {

  int bytesFiltered = 0;
  int dataForkLength = 0;

  public MacBinaryDecoderOutputStream(OutputStream out) {
    super(out);
  }

  public void write(int b) throws IOException {
    // Bytes 83 through 86 are a long representing the data fork length
    // Check 


    
 
 

您可能感兴趣的文章:

  • Linux下怎么用socket接收zip文件流?怎么把zip文件读成流?
  • FTP接收文件的问题
  • 怎样把Cygwin接收到的数据重定向到文件?
  • 各位高手:servlet如何接收采用http上传(如同Email的附件)的文件?
  • 服务器并发接收文件的处理方法
  • PHP接收二进制流并生成文件(实例)
  • 求助,udp文件传输发送端发送完了,接收端却接受到一半就bad address?
  • 怎样用程序(在javabean中,不是jsp)post一个文件到网络服务器上?并接收返回的信息?
  • android通过蓝牙接收文件打开时无法自动选择合适的应用程序
  • Web服务器/前端 iis7站长之家
  • Android中发送Http请求(包括文件上传、servlet接收)的实例代码
  • windows/windows 7/windows 8 下打开查看、修改及保存超大(GB级)文本文件及其它类型文件的工具-PilotEdit
  • 在AIX的tmp目录下面,有很多个文本文件,现在要把每个文本文件里的一些信息提取出来,放在一个文本文件里!
  • 流文件的抓包与文本文件的抓包不同吗?为什么文本正常但流文件抓得包却少得多?
  • 用word2000将文档存为纯文本文件,所得文本文件不满足AScii标准?请教。
  • 急问:怎么将一个文本文件平均拆分成10个文本文件?在shell里面怎么实现?谢谢
  • 如何从文本文件每次读入一行然后处理直到文本结束
  • 请问,怎样把qt的QLineEdit文本框中的内容保存到一个文本文件??谢谢
  • 给定开始和结束行,怎么从一个文本文件中提取一段文本?
  • 如何用Linux中的文本编辑工具提取文本文件中的指定内容?
  • Shell编程:如何在一个文本文件中的第N行插入一行文本?
  • 如何判别文件是不是文本文件?
  • 两个文本文件,如何将第二个文件中的行从第一个文件中删除?
  • UNIX怎样处理ASCII文件与文本文件
  • linux下如何对文本文件和记录文件进行插入删除操作啊?
  • linux修改所有文件类型为文本类型
  • 怎么找到帮助文件,或把帮助文件存为文本文件
  • 如何用Java实现二进制文件到文本文件的相互转化?
  • 执行一程序,向一个文本文件中写入数据,报文件大小超出限制错误!
  • 在Linux下用C/C++写一个文本文件,如何使文件内容换行?
  • 文本界面如何将find出的文件批量复制到指定文件夹
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • cocos2d中CCSpriteFrameCache文件同时存在两个plist的问题解决
  • 修改proc文件系统中同时打开文件个数错误
  • 集群服务器下相同文件夹下文件同时更新
  • 两个程序同时打开文件问题?
  • vi 中编辑两个文件,怎样从其中一个文件拷一段内容到另一个文件中。(同时打开两个文件)
  • 问一个关于多进程同时写文件的问题?
  • 如何用VI同时编辑n个文件
  • 如何将命令的执行结果在屏幕输出的同时保存到文件
  • shell中屏显和写文件同时操作的命令是什么?
  • 如何将一个命令的输出输出到屏幕上,并且同时保存到一个文件中?
  • 请问两个以上用户同时读一个文件的问题。谢谢!
  • 将标准输出同时重定向到屏幕和文件
  • 用gdb同时调试两个文件
  • 请教下:是否有方法 在vim中执行make命令的同时继续编辑和查看文件呢?
  • 高分求救!!!怎样在linux下配置tomcat文件?同时配置sqlServer数据库?
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 集群服务器下相同文件夹下文件同时更新[问题点数:100分]
  • 同时把输出重定向到两个文件里
  • 同时配置两个DNS怎么写/etc/resolv.conf文件 ?
  • 结果可不可以同时标准输出,并且写入文件
  • 如何同时进入在同一个脚本中刚刚建立的文件夹
  • 如何实现这个多重搜索,找出同时包含多个字符串的文件
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3