📄 defaultfileitem.java
字号:
/**
* Returns the contents of the file as a String, using the specified
* encoding. This method uses {@link #get()} to retrieve the
* contents of the file.
*
* @param encoding The character encoding to use.
*
* @return The contents of the file, as a string.
*
* @exception UnsupportedEncodingException if the requested character
* encoding is not available.
*/
public String getString(String encoding)
throws UnsupportedEncodingException
{
return new String(get(), encoding);
}
/**
* Returns the contents of the file as a String, using the default
* character encoding. This method uses {@link #get()} to retrieve the
* contents of the file.
*
* @return The contents of the file, as a string.
*/
public String getString()
{
return new String(get());
}
/**
* Returns the {@link java.io.File} object for the <code>FileItem</code>'s
* data's temporary location on the disk. Note that for
* <code>FileItem</code>s that have their data stored in memory,
* this method will return <code>null</code>. When handling large
* files, you can use {@link java.io.File#renameTo(File)} to
* move the file to new location without copying the data, if the
* source and destination locations reside within the same logical
* volume.
*
* @return The data file, or <code>null</code> if the data is stored in
* memory.
*/
public File getStoreLocation()
{
return storeLocation;
}
/**
* A convenience method to write an uploaded file to disk. The client code
* is not concerned whether or not the file is stored in memory, or on disk
* in a temporary location. They just want to write the uploaded file to
* disk.
*
* @param file The full path to location where the uploaded file should
* be stored.
*
* @exception Exception if an error occurs.
*/
public void write(String file) throws Exception
{
if (isInMemory())
{
FileOutputStream fout = null;
try
{
fout = new FileOutputStream(file);
fout.write(get());
}
finally
{
if (fout != null)
{
fout.close();
}
}
}
else if (storeLocation != null)
{
/*
* The uploaded file is being stored on disk
* in a temporary location so move it to the
* desired file.
*/
if (storeLocation.renameTo(new File(file)) == false)
{
BufferedInputStream in = null;
BufferedOutputStream out = null;
try
{
in = new BufferedInputStream(
new FileInputStream(storeLocation));
out = new BufferedOutputStream(new FileOutputStream(file));
byte[] bytes = new byte[2048];
int s = 0;
while ((s = in.read(bytes)) != -1)
{
out.write(bytes, 0, s);
}
}
finally
{
try
{
in.close();
}
catch (Exception e)
{
// ignore
}
try
{
out.close();
}
catch (Exception e)
{
// ignore
}
}
}
}
else
{
/*
* For whatever reason we cannot write the
* file to disk.
*/
throw new FileUploadException(
"Cannot write uploaded file to disk!");
}
}
/**
* Deletes the underlying storage for a file item, including deleting any
* associated temporary disk file. Although this storage will be deleted
* automatically when the <code>FileItem</code> instance is garbage
* collected, this method can be used to ensure that this is done at an
* earlier time, thus preserving system resources.
*/
public void delete()
{
byteStream = null;
content = null;
if (storeLocation != null && storeLocation.exists())
{
storeLocation.delete();
}
}
/**
* Returns the name of the field in the multipart form corresponding to
* this file item.
*
* @return The name of the form field.
*/
public String getFieldName()
{
return fieldName;
}
/**
* Sets the field name used to reference this file item.
*
* @param fieldName The name of the form field.
*/
public void setFieldName(String fieldName)
{
this.fieldName = fieldName;
}
/**
* Determines whether or not a <code>FileItem</code> instance represents
* a simple form field.
*
* @return <code>true</code> if the instance represents a simple form
* field; <code>false</code> if it represents an uploaded file.
*/
public boolean isFormField()
{
return isFormField;
}
/**
* Specifies whether or not a <code>FileItem</code> instance represents
* a simple form field.
*
* @param state <code>true</code> if the instance represents a simple form
* field; <code>false</code> if it represents an uploaded file.
*/
public void setIsFormField(boolean state)
{
isFormField = state;
}
// --------------------------------------------------------- Public methods
/**
* Removes the file contents from the temporary storage.
*/
protected void finalize()
{
if (storeLocation != null && storeLocation.exists())
{
storeLocation.delete();
}
}
/**
* Returns an {@link java.io.OutputStream OutputStream} that can
* be used for storing the contents of the file.
*
* @return An {@link java.io.OutputStream OutputStream} that can be used
* for storing the contensts of the file.
*
* @exception IOException if an error occurs.
*/
public OutputStream getOutputStream()
throws IOException
{
if (storeLocation == null)
{
return byteStream;
}
else
{
return new FileOutputStream(storeLocation);
}
}
/**
* Instantiates a DefaultFileItem. It uses <code>requestSize</code> to
* decide what temporary storage approach the new item should take.
*
* @param path The path under which temporary files should be
* created.
* @param name The original filename in the client's filesystem.
* @param contentType The content type passed by the browser, or
* <code>null</code> if not defined.
* @param requestSize The total size of the POST request this item
* belongs to.
* @param threshold The maximum size to store in memory.
*
* @return A <code>DefaultFileItem</code> instance.
*/
public static FileItem newInstance(String path,
String name,
String contentType,
int requestSize,
int threshold)
{
DefaultFileItem item = new DefaultFileItem(name, contentType);
if (requestSize > threshold)
{
String fileName = getUniqueId();
fileName = "upload_" + fileName + ".tmp";
fileName = path + "/" + fileName;
File f = new File(fileName);
f.deleteOnExit();
item.storeLocation = f;
}
else
{
item.byteStream = new ByteArrayOutputStream();
}
return item;
}
// -------------------------------------------------------- Private methods
/**
* Returns an identifier that is unique within the class loader used to
* load this class, but does not have random-like apearance.
*
* @return A String with the non-random looking instance identifier.
*/
private static String getUniqueId()
{
int current;
synchronized (DefaultFileItem.class)
{
current = counter++;
}
String id = Integer.toString(current);
// If you manage to get more than 100 million of ids, you'll
// start getting ids longer than 8 characters.
if (current < 100000000)
{
id = ("00000000" + id).substring(id.length());
}
return id;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -