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

📄 fileuploadbase.java

📁 实现上传功能的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
    public FileItemIterator getItemIterator(RequestContext ctx)    throws FileUploadException, IOException {        return new FileItemIteratorImpl(ctx);    }    /**     * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>     * compliant <code>multipart/form-data</code> stream.     *     * @param ctx The context for the request to be parsed.     *     * @return A list of <code>FileItem</code> instances parsed from the     *         request, in the order that they were transmitted.     *     * @throws FileUploadException if there are problems reading/parsing     *                             the request or storing files.     */    public List /* FileItem */ parseRequest(RequestContext ctx)            throws FileUploadException {        try {            FileItemIterator iter = getItemIterator(ctx);            List items = new ArrayList();            FileItemFactory fac = getFileItemFactory();            if (fac == null) {                throw new NullPointerException(                    "No FileItemFactory has been set.");            }            while (iter.hasNext()) {                FileItemStream item = iter.next();                FileItem fileItem = fac.createItem(item.getFieldName(),                        item.getContentType(), item.isFormField(),                        item.getName());                try {                    Streams.copy(item.openStream(), fileItem.getOutputStream(),                            true);                } catch (FileUploadIOException e) {                    throw (FileUploadException) e.getCause();                } catch (IOException e) {                    throw new IOFileUploadException(                            "Processing of " + MULTIPART_FORM_DATA                            + " request failed. " + e.getMessage(), e);                }                if (fileItem instanceof FileItemHeadersSupport) {                    final FileItemHeaders fih = item.getHeaders();                    ((FileItemHeadersSupport) fileItem).setHeaders(fih);                }                items.add(fileItem);            }            return items;        } catch (FileUploadIOException e) {            throw (FileUploadException) e.getCause();        } catch (IOException e) {            throw new FileUploadException(e.getMessage(), e);        }    }    // ------------------------------------------------------ Protected methods    /**     * Retrieves the boundary from the <code>Content-type</code> header.     *     * @param contentType The value of the content type header from which to     *                    extract the boundary value.     *     * @return The boundary, as a byte array.     */    protected byte[] getBoundary(String contentType) {        ParameterParser parser = new ParameterParser();        parser.setLowerCaseNames(true);        // Parameter parser can handle null input        Map params = parser.parse(contentType, new char[] {';', ','});        String boundaryStr = (String) params.get("boundary");        if (boundaryStr == null) {            return null;        }        byte[] boundary;        try {            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>.     * @deprecated Use {@link #getFileName(FileItemHeaders)}.     */    protected String getFileName(Map /* String, String */ headers) {        return getFileName(getHeader(headers, CONTENT_DISPOSITION));    }    /**     * Retrieves the file name from the <code>Content-disposition</code>     * header.     *     * @param headers The HTTP headers object.     *     * @return The file name for the current <code>encapsulation</code>.     */    protected String getFileName(FileItemHeaders headers) {        return getFileName(headers.getHeader(CONTENT_DISPOSITION));    }    /**     * Returns the given content-disposition headers file name.     * @param pContentDisposition The content-disposition headers value.     * @return The file name     */    private String getFileName(String pContentDisposition) {        String fileName = null;        if (pContentDisposition != null) {            String cdl = pContentDisposition.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(pContentDisposition, ';');                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(FileItemHeaders headers) {        return getFieldName(headers.getHeader(CONTENT_DISPOSITION));    }    /**     * Returns the field name, which is given by the content-disposition     * header.     * @param pContentDisposition The content-dispositions header value.     * @return The field jake     */    private String getFieldName(String pContentDisposition) {        String fieldName = null;        if (pContentDisposition != null                && pContentDisposition.toLowerCase().startsWith(FORM_DATA)) {            ParameterParser parser = new ParameterParser();            parser.setLowerCaseNames(true);            // Parameter parser can handle null input            Map params = parser.parse(pContentDisposition, ';');            fieldName = (String) params.get("name");            if (fieldName != null) {                fieldName = fieldName.trim();            }        }        return fieldName;    }    /**     * 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>.     * @deprecated Use {@link #getFieldName(FileItemHeaders)}.     */    protected String getFieldName(Map /* String, String */ headers) {        return getFieldName(getHeader(headers, CONTENT_DISPOSITION));    }    /**     * 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 FileItemHeaders getParsedHeaders(String headerPart) {        final int len = headerPart.length();        FileItemHeadersImpl headers = newFileItemHeaders();        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;    }    /**     * Creates a new instance of {@link FileItemHeaders}.     * @return The new instance.     */    protected FileItemHeadersImpl newFileItemHeaders() {        return new FileItemHeadersImpl();    }    /**     * <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.     * @deprecated Use {@link #getParsedHeaders(String)}     */    protected Map /* String, String */ parseHeaders(String headerPart) {        FileItemHeaders headers = getParsedHeaders(headerPart);        Map result = new HashMap();        for (Iterator iter = headers.getHeaderNames();  iter.hasNext();) {            String headerName = (String) iter.next();            Iterator iter2 = headers.getHeaders(headerName);            String headerValue = (String) iter2.next();            while (iter2.hasNext()) {                headerValue += "," + iter2.next();            }            result.put(headerName, headerValue);        }        return result;    }    /**     * 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(FileItemHeadersImpl headers, String header) {        final int colonOffset = header.indexOf(':');        if (colonOffset == -1) {            // This header line is malformed, skip it.

⌨️ 快捷键说明

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