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

📄 fileuploadbase.java

📁 实现上传功能的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            return;        }        String headerName = header.substring(0, colonOffset).trim();        String headerValue =            header.substring(header.indexOf(':') + 1).trim();        headers.addHeader(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.     * @deprecated Use {@link FileItemHeaders#getHeader(String)}.     */    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;            /** The headers, if any.             */            private FileItemHeaders headers;            /**             * 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.             * @param pContentLength The items content length, if known, or -1             * @throws IOException Creating the file item failed.             */            FileItemStreamImpl(String pName, String pFieldName,                    String pContentType, boolean pFormField,                    long pContentLength) throws IOException {                name = pName;                fieldName = pFieldName;                contentType = pContentType;                formField = pFormField;                final ItemInputStream itemStream = multi.newInputStream();                InputStream istream = itemStream;                if (fileSizeMax != -1) {                    if (pContentLength != -1                            &&  pContentLength > fileSizeMax) {                        FileUploadException e =                            new FileSizeLimitExceededException(                                "The field " + fieldName                                + " exceeds its maximum permitted "                                + " size of " + fileSizeMax                                + " characters.",                                pContentLength, fileSizeMax);                        throw new FileUploadIOException(e);                    }                    istream = new LimitedInputStream(istream, fileSizeMax) {                        protected void raiseError(long pSizeMax, long pCount)                                throws IOException {                            itemStream.close(true);                            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();            }            /**             * Returns the file item headers.             * @return The items header object             */            public FileItemHeaders getHeaders() {                return headers;            }            /**             * Sets the file item headers.             * @param pHeaders The items header object             */            public void setHeaders(FileItemHeaders pHeaders) {                headers = pHeaders;            }        }        /**         * 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);                        }                    };                } else {                    if (sizeMax >= 0 && requestSize > sizeMax) {                        throw new SizeLimitExceededException(                                "the request was rejected because its size ("                                + requestSize                                + ") exceeds the configured maximum ("                                + sizeMax + ")",                                requestSize, sizeMax);                    }                }            }            String charEncoding = headerEncoding;            if (charEncoding == null) {                charEncoding = ctx.getCharacterEncoding();            }            boundary = getBoundary(contentType);            if (boundary == null) {                throw new FileUploadException(                        "the request was rejected because "                        + "no multipart boundary was found");            }            notifier = new MultipartStream.ProgressNotifier(listener,                    ctx.getContentLength());            multi = new MultipartStream(input, boundary, notifier);            multi.setHeaderEncoding(charEncoding);            skipPreamble = true;            findNextItem();        }        /**         * Called for finding the nex item, if any.         * @return True, if an next item was found, otherwise false.         * @throws IOException An I/O error occurred.         */        private boolean findNextItem() throws IOException {            if (eof) {                return false;            }            if (currentItem != null) {                currentItem.close();                currentItem = null;            }            for (;;) {                boolean nextPart;                if (skipPreamble) {                    nextPart = multi.skipPreamble();                } else {                    nextPart = multi.readBoundary();                }                if (!nextPart) {                    if (currentFieldName == null) {                        // Outer multipart terminated -> No more data                        eof = true;                        return false;                    }                    // Inner multipart terminated -> Return to parsing the outer                    multi.setBoundary(boundary);                    currentFieldName = null;                    continue;                }                FileItemHeaders headers = getParsedHeaders(multi.readHeaders());                if (currentFieldName == null) {                    // We're parsing the outer multipart                    String fieldName = getFieldName(headers);                    if (fieldName != null) {                        String subContentType = headers.getHeader(CONTENT_TYPE);                        if (subContentType != null                                &&  subContentType.toLowerCase()                                        .startsWith(MULTIPART_MIXED)) {

⌨️ 快捷键说明

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