init
This commit is contained in:
@@ -0,0 +1,339 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
import org.apache.tomcat.util.http.fileupload.FileItem;
|
||||
import org.apache.tomcat.util.http.fileupload.FileItemHeaders;
|
||||
import org.apache.tomcat.util.http.fileupload.FileItemIterator;
|
||||
import org.apache.tomcat.util.http.fileupload.FileItemStream;
|
||||
import org.apache.tomcat.util.http.fileupload.FileUploadBase;
|
||||
import org.apache.tomcat.util.http.fileupload.FileUploadException;
|
||||
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
||||
import org.apache.tomcat.util.http.fileupload.MultipartStream;
|
||||
import org.apache.tomcat.util.http.fileupload.ProgressListener;
|
||||
import org.apache.tomcat.util.http.fileupload.RequestContext;
|
||||
import org.apache.tomcat.util.http.fileupload.UploadContext;
|
||||
import org.apache.tomcat.util.http.fileupload.util.LimitedInputStream;
|
||||
|
||||
/**
|
||||
* The iterator, which is returned by
|
||||
* {@link FileUploadBase#getItemIterator(RequestContext)}.
|
||||
*/
|
||||
public class FileItemIteratorImpl implements FileItemIterator {
|
||||
private final FileUploadBase fileUploadBase;
|
||||
private final RequestContext ctx;
|
||||
private long sizeMax, fileSizeMax;
|
||||
|
||||
|
||||
@Override
|
||||
public long getSizeMax() {
|
||||
return sizeMax;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSizeMax(long sizeMax) {
|
||||
this.sizeMax = sizeMax;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getFileSizeMax() {
|
||||
return fileSizeMax;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFileSizeMax(long fileSizeMax) {
|
||||
this.fileSizeMax = fileSizeMax;
|
||||
}
|
||||
|
||||
/**
|
||||
* The multi part stream to process.
|
||||
*/
|
||||
private MultipartStream multiPartStream;
|
||||
|
||||
/**
|
||||
* The notifier, which used for triggering the
|
||||
* {@link ProgressListener}.
|
||||
*/
|
||||
private MultipartStream.ProgressNotifier progressNotifier;
|
||||
|
||||
/**
|
||||
* The boundary, which separates the various parts.
|
||||
*/
|
||||
private byte[] multiPartBoundary;
|
||||
|
||||
/**
|
||||
* 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 pFileUploadBase Upload instance
|
||||
* @param pRequestContext The request context.
|
||||
* @throws FileUploadException An error occurred while
|
||||
* parsing the request.
|
||||
* @throws IOException An I/O error occurred.
|
||||
*/
|
||||
public FileItemIteratorImpl(FileUploadBase pFileUploadBase, RequestContext pRequestContext)
|
||||
throws FileUploadException, IOException {
|
||||
fileUploadBase = pFileUploadBase;
|
||||
sizeMax = fileUploadBase.getSizeMax();
|
||||
fileSizeMax = fileUploadBase.getFileSizeMax();
|
||||
ctx = pRequestContext;
|
||||
if (ctx == null) {
|
||||
throw new NullPointerException("ctx parameter");
|
||||
}
|
||||
|
||||
|
||||
skipPreamble = true;
|
||||
findNextItem();
|
||||
}
|
||||
|
||||
protected void init(FileUploadBase fileUploadBase, @SuppressWarnings("unused") RequestContext pRequestContext)
|
||||
throws FileUploadException, IOException {
|
||||
String contentType = ctx.getContentType();
|
||||
if ((null == contentType)
|
||||
|| (!contentType.toLowerCase(Locale.ENGLISH).startsWith(FileUploadBase.MULTIPART))) {
|
||||
throw new InvalidContentTypeException(
|
||||
String.format("the request doesn't contain a %s or %s stream, content type header is %s",
|
||||
FileUploadBase.MULTIPART_FORM_DATA, FileUploadBase.MULTIPART_MIXED, contentType));
|
||||
}
|
||||
|
||||
final long requestSize = ((UploadContext) ctx).contentLength();
|
||||
|
||||
InputStream input; // N.B. this is eventually closed in MultipartStream processing
|
||||
if (sizeMax >= 0) {
|
||||
if (requestSize != -1 && requestSize > sizeMax) {
|
||||
throw new SizeLimitExceededException(
|
||||
String.format("the request was rejected because its size (%s) exceeds the configured maximum (%s)",
|
||||
Long.valueOf(requestSize), Long.valueOf(sizeMax)),
|
||||
requestSize, sizeMax);
|
||||
}
|
||||
// N.B. this is eventually closed in MultipartStream processing
|
||||
input = new LimitedInputStream(ctx.getInputStream(), sizeMax) {
|
||||
@Override
|
||||
protected void raiseError(long pSizeMax, long pCount)
|
||||
throws IOException {
|
||||
FileUploadException ex = new SizeLimitExceededException(
|
||||
String.format("the request was rejected because its size (%s) exceeds the configured maximum (%s)",
|
||||
Long.valueOf(pCount), Long.valueOf(pSizeMax)),
|
||||
pCount, pSizeMax);
|
||||
throw new FileUploadIOException(ex);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
input = ctx.getInputStream();
|
||||
}
|
||||
|
||||
String charEncoding = fileUploadBase.getHeaderEncoding();
|
||||
if (charEncoding == null) {
|
||||
charEncoding = ctx.getCharacterEncoding();
|
||||
}
|
||||
|
||||
multiPartBoundary = fileUploadBase.getBoundary(contentType);
|
||||
if (multiPartBoundary == null) {
|
||||
IOUtils.closeQuietly(input); // avoid possible resource leak
|
||||
throw new FileUploadException("the request was rejected because no multipart boundary was found");
|
||||
}
|
||||
|
||||
progressNotifier = new MultipartStream.ProgressNotifier(fileUploadBase.getProgressListener(), requestSize);
|
||||
try {
|
||||
multiPartStream = new MultipartStream(input, multiPartBoundary, progressNotifier);
|
||||
} catch (IllegalArgumentException iae) {
|
||||
IOUtils.closeQuietly(input); // avoid possible resource leak
|
||||
throw new InvalidContentTypeException(
|
||||
String.format("The boundary specified in the %s header is too long", FileUploadBase.CONTENT_TYPE), iae);
|
||||
}
|
||||
multiPartStream.setHeaderEncoding(charEncoding);
|
||||
}
|
||||
|
||||
public MultipartStream getMultiPartStream() throws FileUploadException, IOException {
|
||||
if (multiPartStream == null) {
|
||||
init(fileUploadBase, ctx);
|
||||
}
|
||||
return multiPartStream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called for finding the next item, if any.
|
||||
*
|
||||
* @return True, if an next item was found, otherwise false.
|
||||
* @throws IOException An I/O error occurred.
|
||||
*/
|
||||
private boolean findNextItem() throws FileUploadException, IOException {
|
||||
if (eof) {
|
||||
return false;
|
||||
}
|
||||
if (currentItem != null) {
|
||||
currentItem.close();
|
||||
currentItem = null;
|
||||
}
|
||||
final MultipartStream multi = getMultiPartStream();
|
||||
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(multiPartBoundary);
|
||||
currentFieldName = null;
|
||||
continue;
|
||||
}
|
||||
FileItemHeaders headers = fileUploadBase.getParsedHeaders(multi.readHeaders());
|
||||
if (currentFieldName == null) {
|
||||
// We're parsing the outer multipart
|
||||
String fieldName = fileUploadBase.getFieldName(headers);
|
||||
if (fieldName != null) {
|
||||
String subContentType = headers.getHeader(FileUploadBase.CONTENT_TYPE);
|
||||
if (subContentType != null
|
||||
&& subContentType.toLowerCase(Locale.ENGLISH)
|
||||
.startsWith(FileUploadBase.MULTIPART_MIXED)) {
|
||||
currentFieldName = fieldName;
|
||||
// Multiple files associated with this field name
|
||||
byte[] subBoundary = fileUploadBase.getBoundary(subContentType);
|
||||
multi.setBoundary(subBoundary);
|
||||
skipPreamble = true;
|
||||
continue;
|
||||
}
|
||||
String fileName = fileUploadBase.getFileName(headers);
|
||||
currentItem = new FileItemStreamImpl(this, fileName,
|
||||
fieldName, headers.getHeader(FileUploadBase.CONTENT_TYPE),
|
||||
fileName == null, getContentLength(headers));
|
||||
currentItem.setHeaders(headers);
|
||||
progressNotifier.noteItem();
|
||||
itemValid = true;
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
String fileName = fileUploadBase.getFileName(headers);
|
||||
if (fileName != null) {
|
||||
currentItem = new FileItemStreamImpl(this, fileName,
|
||||
currentFieldName,
|
||||
headers.getHeader(FileUploadBase.CONTENT_TYPE),
|
||||
false, getContentLength(headers));
|
||||
currentItem.setHeaders(headers);
|
||||
progressNotifier.noteItem();
|
||||
itemValid = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
multi.discardBodyData();
|
||||
}
|
||||
}
|
||||
|
||||
private long getContentLength(FileItemHeaders pHeaders) {
|
||||
try {
|
||||
return Long.parseLong(pHeaders.getHeader(FileUploadBase.CONTENT_LENGTH));
|
||||
} catch (Exception e) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns, whether another instance of {@link FileItemStream}
|
||||
* is available.
|
||||
*
|
||||
* @throws FileUploadException Parsing or processing the
|
||||
* file item failed.
|
||||
* @throws IOException Reading the file item failed.
|
||||
* @return True, if one or more additional file items
|
||||
* are available, otherwise false.
|
||||
*/
|
||||
@Override
|
||||
public boolean hasNext() throws FileUploadException, IOException {
|
||||
if (eof) {
|
||||
return false;
|
||||
}
|
||||
if (itemValid) {
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
return findNextItem();
|
||||
} catch (FileUploadIOException e) {
|
||||
// unwrap encapsulated SizeException
|
||||
throw (FileUploadException) e.getCause();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next available {@link FileItemStream}.
|
||||
*
|
||||
* @throws java.util.NoSuchElementException No more items are
|
||||
* available. Use {@link #hasNext()} to prevent this exception.
|
||||
* @throws FileUploadException Parsing or processing the
|
||||
* file item failed.
|
||||
* @throws IOException Reading the file item failed.
|
||||
* @return FileItemStream instance, which provides
|
||||
* access to the next file item.
|
||||
*/
|
||||
@Override
|
||||
public FileItemStream next() throws FileUploadException, IOException {
|
||||
if (eof || (!itemValid && !hasNext())) {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
itemValid = false;
|
||||
return currentItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FileItem> getFileItems() throws FileUploadException, IOException {
|
||||
final List<FileItem> items = new ArrayList<>();
|
||||
while (hasNext()) {
|
||||
final FileItemStream fis = next();
|
||||
final FileItem fi = fileUploadBase.getFileItemFactory().createItem(fis.getFieldName(), fis.getContentType(), fis.isFormField(), fis.getName());
|
||||
items.add(fi);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.apache.tomcat.util.http.fileupload.FileItemHeaders;
|
||||
import org.apache.tomcat.util.http.fileupload.FileItemStream;
|
||||
import org.apache.tomcat.util.http.fileupload.FileUploadException;
|
||||
import org.apache.tomcat.util.http.fileupload.InvalidFileNameException;
|
||||
import org.apache.tomcat.util.http.fileupload.MultipartStream.ItemInputStream;
|
||||
import org.apache.tomcat.util.http.fileupload.util.Closeable;
|
||||
import org.apache.tomcat.util.http.fileupload.util.LimitedInputStream;
|
||||
import org.apache.tomcat.util.http.fileupload.util.Streams;
|
||||
|
||||
|
||||
/**
|
||||
* Default implementation of {@link FileItemStream}.
|
||||
*/
|
||||
public class FileItemStreamImpl implements FileItemStream {
|
||||
private final FileItemIteratorImpl fileItemIteratorImpl;
|
||||
|
||||
/**
|
||||
* The file items content type.
|
||||
*/
|
||||
private final String contentType;
|
||||
|
||||
/**
|
||||
* The file items field name.
|
||||
*/
|
||||
private final String fieldName;
|
||||
|
||||
/**
|
||||
* The file items file name.
|
||||
*/
|
||||
final String name;
|
||||
|
||||
/**
|
||||
* Whether the file item is a form field.
|
||||
*/
|
||||
private final boolean formField;
|
||||
|
||||
/**
|
||||
* The file items input stream.
|
||||
*/
|
||||
private final InputStream stream;
|
||||
|
||||
/**
|
||||
* The headers, if any.
|
||||
*/
|
||||
private FileItemHeaders headers;
|
||||
|
||||
/**
|
||||
* Creates a new instance.
|
||||
* @param pFileItemIterator Iterator for all files in this upload
|
||||
* @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 FileUploadException If an error is encountered processing the request
|
||||
* @throws IOException Creating the file item failed.
|
||||
*/
|
||||
public FileItemStreamImpl(FileItemIteratorImpl pFileItemIterator, String pName, String pFieldName,
|
||||
String pContentType, boolean pFormField,
|
||||
long pContentLength) throws FileUploadException, IOException {
|
||||
fileItemIteratorImpl = pFileItemIterator;
|
||||
name = pName;
|
||||
fieldName = pFieldName;
|
||||
contentType = pContentType;
|
||||
formField = pFormField;
|
||||
final long fileSizeMax = fileItemIteratorImpl.getFileSizeMax();
|
||||
if (fileSizeMax != -1) { // Check if limit is already exceeded
|
||||
if (pContentLength != -1
|
||||
&& pContentLength > fileSizeMax) {
|
||||
FileSizeLimitExceededException e =
|
||||
new FileSizeLimitExceededException(
|
||||
String.format("The field %s exceeds its maximum permitted size of %s bytes.",
|
||||
fieldName, Long.valueOf(fileSizeMax)),
|
||||
pContentLength, fileSizeMax);
|
||||
e.setFileName(pName);
|
||||
e.setFieldName(pFieldName);
|
||||
throw new FileUploadIOException(e);
|
||||
}
|
||||
}
|
||||
// OK to construct stream now
|
||||
final ItemInputStream itemStream = fileItemIteratorImpl.getMultiPartStream().newInputStream();
|
||||
InputStream istream = itemStream;
|
||||
if (fileSizeMax != -1) {
|
||||
istream = new LimitedInputStream(istream, fileSizeMax) {
|
||||
@Override
|
||||
protected void raiseError(long pSizeMax, long pCount)
|
||||
throws IOException {
|
||||
itemStream.close(true);
|
||||
FileSizeLimitExceededException e =
|
||||
new FileSizeLimitExceededException(
|
||||
String.format("The field %s exceeds its maximum permitted size of %s bytes.",
|
||||
fieldName, Long.valueOf(pSizeMax)),
|
||||
pCount, pSizeMax);
|
||||
e.setFieldName(fieldName);
|
||||
e.setFileName(name);
|
||||
throw new FileUploadIOException(e);
|
||||
}
|
||||
};
|
||||
}
|
||||
stream = istream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the items content type, or null.
|
||||
*
|
||||
* @return Content type, if known, or null.
|
||||
*/
|
||||
@Override
|
||||
public String getContentType() {
|
||||
return contentType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the items field name.
|
||||
*
|
||||
* @return Field name.
|
||||
*/
|
||||
@Override
|
||||
public String getFieldName() {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the items file name.
|
||||
*
|
||||
* @return File name, if known, or null.
|
||||
* @throws InvalidFileNameException The file name contains a NUL character,
|
||||
* which might be an indicator of a security attack. If you intend to
|
||||
* use the file name anyways, catch the exception and use
|
||||
* InvalidFileNameException#getName().
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return Streams.checkFileName(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns, whether this is a form field.
|
||||
*
|
||||
* @return True, if the item is a form field,
|
||||
* otherwise false.
|
||||
*/
|
||||
@Override
|
||||
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.
|
||||
*/
|
||||
@Override
|
||||
public InputStream openStream() throws IOException {
|
||||
if (((Closeable) stream).isClosed()) {
|
||||
throw new FileItemStream.ItemSkippedException();
|
||||
}
|
||||
return stream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the file item.
|
||||
*
|
||||
* @throws IOException An I/O error occurred.
|
||||
*/
|
||||
public void close() throws IOException {
|
||||
stream.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the file item headers.
|
||||
*
|
||||
* @return The items header object
|
||||
*/
|
||||
@Override
|
||||
public FileItemHeaders getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file item headers.
|
||||
*
|
||||
* @param pHeaders The items header object
|
||||
*/
|
||||
@Override
|
||||
public void setHeaders(FileItemHeaders pHeaders) {
|
||||
headers = pHeaders;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
/**
|
||||
* Thrown to indicate that A files size exceeds the configured maximum.
|
||||
*/
|
||||
public class FileSizeLimitExceededException
|
||||
extends SizeException {
|
||||
|
||||
/**
|
||||
* The exceptions UID, for serializing an instance.
|
||||
*/
|
||||
private static final long serialVersionUID = 8150776562029630058L;
|
||||
|
||||
/**
|
||||
* File name of the item, which caused the exception.
|
||||
*/
|
||||
private String fileName;
|
||||
|
||||
/**
|
||||
* Field name of the item, which caused the exception.
|
||||
*/
|
||||
private String fieldName;
|
||||
|
||||
/**
|
||||
* Constructs a <code>SizeExceededException</code> with
|
||||
* the specified detail message, and actual and permitted sizes.
|
||||
*
|
||||
* @param message The detail message.
|
||||
* @param actual The actual request size.
|
||||
* @param permitted The maximum permitted request size.
|
||||
*/
|
||||
public FileSizeLimitExceededException(String message, long actual,
|
||||
long permitted) {
|
||||
super(message, actual, permitted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the file name of the item, which caused the
|
||||
* exception.
|
||||
*
|
||||
* @return File name, if known, or null.
|
||||
*/
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file name of the item, which caused the
|
||||
* exception.
|
||||
*
|
||||
* @param pFileName the file name of the item, which caused the exception.
|
||||
*/
|
||||
public void setFileName(String pFileName) {
|
||||
fileName = pFileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the field name of the item, which caused the
|
||||
* exception.
|
||||
*
|
||||
* @return Field name, if known, or null.
|
||||
*/
|
||||
public String getFieldName() {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the field name of the item, which caused the
|
||||
* exception.
|
||||
*
|
||||
* @param pFieldName the field name of the item,
|
||||
* which caused the exception.
|
||||
*/
|
||||
public void setFieldName(String pFieldName) {
|
||||
fieldName = pFieldName;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.tomcat.util.http.fileupload.FileUploadException;
|
||||
|
||||
/**
|
||||
* This exception is thrown for hiding an inner
|
||||
* {@link FileUploadException} in an {@link IOException}.
|
||||
*/
|
||||
public class FileUploadIOException extends IOException {
|
||||
|
||||
/**
|
||||
* The exceptions UID, for serializing an instance.
|
||||
*/
|
||||
private static final long serialVersionUID = -7047616958165584154L;
|
||||
|
||||
/**
|
||||
* The exceptions cause; we overwrite the parent
|
||||
* classes field, which is available since Java
|
||||
* 1.4 only.
|
||||
*/
|
||||
private final FileUploadException cause;
|
||||
|
||||
/**
|
||||
* Creates a <code>FileUploadIOException</code> with the
|
||||
* given cause.
|
||||
*
|
||||
* @param pCause The exceptions cause, if any, or null.
|
||||
*/
|
||||
public FileUploadIOException(FileUploadException pCause) {
|
||||
// We're not doing super(pCause) cause of 1.3 compatibility.
|
||||
cause = pCause;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the exceptions cause.
|
||||
*
|
||||
* @return The exceptions cause, if any, or null.
|
||||
*/
|
||||
@SuppressWarnings("sync-override") // Field is final
|
||||
@Override
|
||||
public Throwable getCause() {
|
||||
return cause;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.tomcat.util.http.fileupload.FileUploadException;
|
||||
|
||||
/**
|
||||
* Thrown to indicate an IOException.
|
||||
*/
|
||||
public class IOFileUploadException extends FileUploadException {
|
||||
|
||||
/**
|
||||
* The exceptions UID, for serializing an instance.
|
||||
*/
|
||||
private static final long serialVersionUID = 1749796615868477269L;
|
||||
|
||||
/**
|
||||
* The exceptions cause; we overwrite the parent
|
||||
* classes field, which is available since Java
|
||||
* 1.4 only.
|
||||
*/
|
||||
private final IOException cause;
|
||||
|
||||
/**
|
||||
* Creates a new instance with the given cause.
|
||||
*
|
||||
* @param pMsg The detail message.
|
||||
* @param pException The exceptions cause.
|
||||
*/
|
||||
public IOFileUploadException(String pMsg, IOException pException) {
|
||||
super(pMsg);
|
||||
cause = pException;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the exceptions cause.
|
||||
*
|
||||
* @return The exceptions cause, if any, or null.
|
||||
*/
|
||||
@SuppressWarnings("sync-override") // Field is final
|
||||
@Override
|
||||
public Throwable getCause() {
|
||||
return cause;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
import org.apache.tomcat.util.http.fileupload.FileUploadException;
|
||||
|
||||
/**
|
||||
* Thrown to indicate that the request is not a multipart request.
|
||||
*/
|
||||
public class InvalidContentTypeException
|
||||
extends FileUploadException {
|
||||
|
||||
/**
|
||||
* The exceptions UID, for serializing an instance.
|
||||
*/
|
||||
private static final long serialVersionUID = -9073026332015646668L;
|
||||
|
||||
/**
|
||||
* Constructs a <code>InvalidContentTypeException</code> with no
|
||||
* detail message.
|
||||
*/
|
||||
public InvalidContentTypeException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an <code>InvalidContentTypeException</code> with
|
||||
* the specified detail message.
|
||||
*
|
||||
* @param message The detail message.
|
||||
*/
|
||||
public InvalidContentTypeException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an <code>InvalidContentTypeException</code> with
|
||||
* the specified detail message and cause.
|
||||
*
|
||||
* @param msg The detail message.
|
||||
* @param cause the original cause
|
||||
*
|
||||
* @since 1.3.1
|
||||
*/
|
||||
public InvalidContentTypeException(String msg, Throwable cause) {
|
||||
super(msg, cause);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
import org.apache.tomcat.util.http.fileupload.FileUploadException;
|
||||
|
||||
/**
|
||||
* This exception is thrown, if a requests permitted size
|
||||
* is exceeded.
|
||||
*/
|
||||
public abstract class SizeException extends FileUploadException {
|
||||
|
||||
/**
|
||||
* Serial version UID, being used, if serialized.
|
||||
*/
|
||||
private static final long serialVersionUID = -8776225574705254126L;
|
||||
|
||||
/**
|
||||
* The actual size of the request.
|
||||
*/
|
||||
private final long actual;
|
||||
|
||||
/**
|
||||
* The maximum permitted size of the request.
|
||||
*/
|
||||
private final long permitted;
|
||||
|
||||
/**
|
||||
* Creates a new instance.
|
||||
*
|
||||
* @param message The detail message.
|
||||
* @param actual The actual number of bytes in the request.
|
||||
* @param permitted The requests size limit, in bytes.
|
||||
*/
|
||||
protected SizeException(String message, long actual, long permitted) {
|
||||
super(message);
|
||||
this.actual = actual;
|
||||
this.permitted = permitted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the actual size of the request.
|
||||
*
|
||||
* @return The actual size of the request.
|
||||
* @since 1.3
|
||||
*/
|
||||
public long getActualSize() {
|
||||
return actual;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the permitted size of the request.
|
||||
*
|
||||
* @return The permitted size of the request.
|
||||
* @since 1.3
|
||||
*/
|
||||
public long getPermittedSize() {
|
||||
return permitted;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.tomcat.util.http.fileupload.impl;
|
||||
|
||||
/**
|
||||
* Thrown to indicate that the request size exceeds the configured maximum.
|
||||
*/
|
||||
public class SizeLimitExceededException
|
||||
extends SizeException {
|
||||
|
||||
/**
|
||||
* The exceptions UID, for serializing an instance.
|
||||
*/
|
||||
private static final long serialVersionUID = -2474893167098052828L;
|
||||
|
||||
/**
|
||||
* Constructs a <code>SizeExceededException</code> with
|
||||
* the specified detail message, and actual and permitted sizes.
|
||||
*
|
||||
* @param message The detail message.
|
||||
* @param actual The actual request size.
|
||||
* @param permitted The maximum permitted request size.
|
||||
*/
|
||||
public SizeLimitExceededException(String message, long actual,
|
||||
long permitted) {
|
||||
super(message, actual, permitted);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user