⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileuploadbase.java

📁 apache commons-fileupload-1.2.jar
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            boundary = boundaryStr.getBytes("ISO-8859-1");        } catch (UnsupportedEncodingException e) {            boundary = boundaryStr.getBytes();        }        return boundary;    }    /**     * Retrieves the file name from the <code>Content-disposition</code>     * header.     *     * @param headers A <code>Map</code> containing the HTTP request headers.     *     * @return The file name for the current <code>encapsulation</code>.     */    protected String getFileName(Map /* String, String */ headers) {        String fileName = null;        String cd = getHeader(headers, CONTENT_DISPOSITION);        if (cd != null) {            String cdl = cd.toLowerCase();            if (cdl.startsWith(FORM_DATA) || cdl.startsWith(ATTACHMENT)) {                ParameterParser parser = new ParameterParser();                parser.setLowerCaseNames(true);                // Parameter parser can handle null input                Map params = parser.parse(cd, ';');                if (params.containsKey("filename")) {                    fileName = (String) params.get("filename");                    if (fileName != null) {                        fileName = fileName.trim();                    } else {                        // Even if there is no value, the parameter is present,                        // so we return an empty file name rather than no file                        // name.                        fileName = "";                    }                }            }        }        return fileName;    }    /**     * Retrieves the field name from the <code>Content-disposition</code>     * header.     *     * @param headers A <code>Map</code> containing the HTTP request headers.     *     * @return The field name for the current <code>encapsulation</code>.     */    protected String getFieldName(Map /* String, String */ headers) {        String fieldName = null;        String cd = getHeader(headers, CONTENT_DISPOSITION);        if (cd != null && cd.toLowerCase().startsWith(FORM_DATA)) {            ParameterParser parser = new ParameterParser();            parser.setLowerCaseNames(true);            // Parameter parser can handle null input            Map params = parser.parse(cd, ';');            fieldName = (String) params.get("name");            if (fieldName != null) {                fieldName = fieldName.trim();            }        }        return fieldName;    }    /**     * Creates a new {@link FileItem} instance.     *     * @param headers       A <code>Map</code> containing the HTTP request     *                      headers.     * @param isFormField   Whether or not this item is a form field, as     *                      opposed to a file.     *     * @return A newly created <code>FileItem</code> instance.     *     * @throws FileUploadException if an error occurs.     * @deprecated This method is no longer used in favour of     *   internally created instances of {@link FileItem}.     */    protected FileItem createItem(Map /* String, String */ headers,                                  boolean isFormField)        throws FileUploadException {        return getFileItemFactory().createItem(getFieldName(headers),                getHeader(headers, CONTENT_TYPE),                isFormField,                getFileName(headers));    }    /**     * <p> Parses the <code>header-part</code> and returns as key/value     * pairs.     *     * <p> If there are multiple headers of the same names, the name     * will map to a comma-separated list containing the values.     *     * @param headerPart The <code>header-part</code> of the current     *                   <code>encapsulation</code>.     *     * @return A <code>Map</code> containing the parsed HTTP request headers.     */    protected Map /* String, String */ parseHeaders(String headerPart) {        final int len = headerPart.length();        Map headers = new HashMap();        int start = 0;        for (;;) {            int end = parseEndOfLine(headerPart, start);            if (start == end) {                break;            }            String header = headerPart.substring(start, end);            start = end + 2;            while (start < len) {                int nonWs = start;                while (nonWs < len) {                    char c = headerPart.charAt(nonWs);                    if (c != ' '  &&  c != '\t') {                        break;                    }                    ++nonWs;                }                if (nonWs == start) {                    break;                }                // Continuation line found                end = parseEndOfLine(headerPart, nonWs);                header += " " + headerPart.substring(nonWs, end);                start = end + 2;            }            parseHeaderLine(headers, header);        }        return headers;    }    /**     * Skips bytes until the end of the current line.     * @param headerPart The headers, which are being parsed.     * @param end Index of the last byte, which has yet been     *   processed.     * @return Index of the \r\n sequence, which indicates     *   end of line.     */    private int parseEndOfLine(String headerPart, int end) {        int index = end;        for (;;) {            int offset = headerPart.indexOf('\r', index);            if (offset == -1  ||  offset + 1 >= headerPart.length()) {                throw new IllegalStateException(                    "Expected headers to be terminated by an empty line.");            }            if (headerPart.charAt(offset + 1) == '\n') {                return offset;            }            index = offset + 1;        }    }    /**     * Reads the next header line.     * @param headers String with all headers.     * @param header Map where to store the current header.     */    private void parseHeaderLine(Map headers, String header) {        final int colonOffset = header.indexOf(':');        if (colonOffset == -1) {            // This header line is malformed, skip it.            return;        }        String headerName = header.substring(0, colonOffset)            .trim().toLowerCase();        String headerValue =            header.substring(header.indexOf(':') + 1).trim();        if (getHeader(headers, headerName) != null) {            // More that one heder of that name exists,            // append to the list.            headers.put(headerName,                    getHeader(headers, headerName) + ','                    + headerValue);        } else {            headers.put(headerName, headerValue);        }    }    /**     * Returns the header with the specified name from the supplied map. The     * header lookup is case-insensitive.     *     * @param headers A <code>Map</code> containing the HTTP request headers.     * @param name    The name of the header to return.     *     * @return The value of specified header, or a comma-separated list if     *         there were multiple headers of that name.     */    protected final String getHeader(Map /* String, String */ headers,            String name) {        return (String) headers.get(name.toLowerCase());    }    /**     * The iterator, which is returned by     * {@link FileUploadBase#getItemIterator(RequestContext)}.     */    private class FileItemIteratorImpl implements FileItemIterator {        /**         * Default implementation of {@link FileItemStream}.         */        private class FileItemStreamImpl implements FileItemStream {            /** The file items content type.             */            private final String contentType;            /** The file items field name.             */            private final String fieldName;            /** The file items file name.             */            private final String name;            /** Whether the file item is a form field.             */            private final boolean formField;            /** The file items input stream.             */            private final InputStream stream;            /** Whether the file item was already opened.             */            private boolean opened;            /**             * CReates a new instance.             * @param pName The items file name, or null.             * @param pFieldName The items field name.             * @param pContentType The items content type, or null.             * @param pFormField Whether the item is a form field.             */            FileItemStreamImpl(String pName, String pFieldName,                    String pContentType, boolean pFormField) {                name = pName;                fieldName = pFieldName;                contentType = pContentType;                formField = pFormField;                InputStream istream = multi.newInputStream();                if (fileSizeMax != -1) {                    istream = new LimitedInputStream(istream, fileSizeMax) {                        protected void raiseError(long pSizeMax, long pCount)                                throws IOException {                            FileUploadException e =                                new FileSizeLimitExceededException(                                    "The field " + fieldName                                    + " exceeds its maximum permitted "                                    + " size of " + pSizeMax                                    + " characters.",                                    pCount, pSizeMax);                            throw new FileUploadIOException(e);                        }                    };                }                stream = istream;            }            /**             * Returns the items content type, or null.             * @return Content type, if known, or null.             */            public String getContentType() {                return contentType;            }            /**             * Returns the items field name.             * @return Field name.             */            public String getFieldName() {                return fieldName;            }            /**             * Returns the items file name.             * @return File name, if known, or null.             */            public String getName() {                return name;            }            /**             * Returns, whether this is a form field.             * @return True, if the item is a form field,             *   otherwise false.             */            public boolean isFormField() {                return formField;            }            /**             * Returns an input stream, which may be used to             * read the items contents.             * @return Opened input stream.             * @throws IOException An I/O error occurred.             */            public InputStream openStream() throws IOException {                if (opened) {                    throw new IllegalStateException(                            "The stream was already opened.");                }                if (((Closeable) stream).isClosed()) {                    throw new FileItemStream.ItemSkippedException();                }                return stream;            }            /**             * Closes the file item.             * @throws IOException An I/O error occurred.             */            void close() throws IOException {                stream.close();            }        }        /**         * The multi part stream to process.         */        private final MultipartStream multi;        /**         * The notifier, which used for triggering the         * {@link ProgressListener}.         */        private final MultipartStream.ProgressNotifier notifier;        /**         * The boundary, which separates the various parts.         */        private final byte[] boundary;        /**         * The item, which we currently process.         */        private FileItemStreamImpl currentItem;        /**         * The current items field name.         */        private String currentFieldName;        /**         * Whether we are currently skipping the preamble.         */        private boolean skipPreamble;        /**         * Whether the current item may still be read.         */        private boolean itemValid;        /**         * Whether we have seen the end of the file.         */        private boolean eof;        /**         * Creates a new instance.         * @param ctx The request context.         * @throws FileUploadException An error occurred while         *   parsing the request.         * @throws IOException An I/O error occurred.         */        FileItemIteratorImpl(RequestContext ctx)                throws FileUploadException, IOException {            if (ctx == null) {                throw new NullPointerException("ctx parameter");            }            String contentType = ctx.getContentType();            if ((null == contentType)                    || (!contentType.toLowerCase().startsWith(MULTIPART))) {                throw new InvalidContentTypeException(                        "the request doesn't contain a "                        + MULTIPART_FORM_DATA                        + " or "                        + MULTIPART_MIXED                        + " stream, content type header is "                        + contentType);            }            InputStream input = ctx.getInputStream();            if (sizeMax >= 0) {                int requestSize = ctx.getContentLength();                if (requestSize == -1) {                    input = new LimitedInputStream(input, sizeMax) {                        protected void raiseError(long pSizeMax, long pCount)                                throws IOException {                            FileUploadException ex =                                new SizeLimitExceededException(                                    "the request was rejected because"                                    + " its size (" + pCount                                    + ") exceeds the configured maximum"                                    + " (" + pSizeMax + ")",                                    pCount, pSizeMax);                            throw new FileUploadIOException(ex);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -