summaryrefslogtreecommitdiffstats
path: root/user_guide_src/source/libraries/file_uploading.rst
diff options
context:
space:
mode:
Diffstat (limited to 'user_guide_src/source/libraries/file_uploading.rst')
-rw-r--r--user_guide_src/source/libraries/file_uploading.rst327
1 files changed, 327 insertions, 0 deletions
diff --git a/user_guide_src/source/libraries/file_uploading.rst b/user_guide_src/source/libraries/file_uploading.rst
new file mode 100644
index 000000000..90efca95d
--- /dev/null
+++ b/user_guide_src/source/libraries/file_uploading.rst
@@ -0,0 +1,327 @@
+####################
+File Uploading Class
+####################
+
+CodeIgniter's File Uploading Class permits files to be uploaded. You can
+set various preferences, restricting the type and size of the files.
+
+***********
+The Process
+***********
+
+Uploading a file involves the following general process:
+
+- An upload form is displayed, allowing a user to select a file and
+ upload it.
+- When the form is submitted, the file is uploaded to the destination
+ you specify.
+- Along the way, the file is validated to make sure it is allowed to be
+ uploaded based on the preferences you set.
+- Once uploaded, the user will be shown a success message.
+
+To demonstrate this process here is brief tutorial. Afterward you'll
+find reference information.
+
+Creating the Upload Form
+========================
+
+Using a text editor, create a form called upload_form.php. In it, place
+this code and save it to your applications/views/ folder::
+
+ <html>
+ <head>
+ <title>Upload Form</title>
+ </head>
+ <body>
+
+ <?php echo $error;?>
+
+ <?php echo form_open_multipart('upload/do_upload');?>
+
+ <input type="file" name="userfile" size="20" />
+
+ <br /><br />
+
+ <input type="submit" value="upload" />
+
+ </form>
+
+ </body>
+ </html>
+
+You'll notice we are using a form helper to create the opening form tag.
+File uploads require a multipart form, so the helper creates the proper
+syntax for you. You'll also notice we have an $error variable. This is
+so we can show error messages in the event the user does something
+wrong.
+
+The Success Page
+================
+
+Using a text editor, create a form called upload_success.php. In it,
+place this code and save it to your applications/views/ folder::
+
+ <html>
+ <head>
+ <title>Upload Form</title>
+ </head>
+ <body>
+
+ <h3>Your file was successfully uploaded!</h3>
+
+ <ul>
+ <?php foreach ($upload_data as $item => $value):?>
+ <li><?php echo $item;?>: <?php echo $value;?></li>
+ <?php endforeach; ?>
+ </ul>
+
+ <p><?php echo anchor('upload', 'Upload Another File!'); ?></p>
+
+ </body>
+ </html>
+
+The Controller
+==============
+
+Using a text editor, create a controller called upload.php. In it, place
+this code and save it to your applications/controllers/ folder::
+
+ <?php
+
+ class Upload extends CI_Controller {
+
+ function __construct()
+ {
+ parent::__construct();
+ $this->load->helper(array('form', 'url'));
+ }
+
+ function index()
+ {
+ $this->load->view('upload_form', array('error' => ' ' ));
+ }
+
+ function do_upload()
+ {
+ $config['upload_path'] = './uploads/';
+ $config['allowed_types'] = 'gif|jpg|png';
+ $config['max_size'] = '100';
+ $config['max_width'] = '1024';
+ $config['max_height'] = '768';
+
+ $this->load->library('upload', $config);
+
+ if ( ! $this->upload->do_upload())
+ {
+ $error = array('error' => $this->upload->display_errors());
+
+ $this->load->view('upload_form', $error);
+ }
+ else
+ {
+ $data = array('upload_data' => $this->upload->data());
+
+ $this->load->view('upload_success', $data);
+ }
+ }
+ }
+ ?>
+
+The Upload Folder
+=================
+
+You'll need a destination folder for your uploaded images. Create a
+folder at the root of your CodeIgniter installation called uploads and
+set its file permissions to 777.
+
+Try it!
+=======
+
+To try your form, visit your site using a URL similar to this one::
+
+ example.com/index.php/upload/
+
+You should see an upload form. Try uploading an image file (either a
+jpg, gif, or png). If the path in your controller is correct it should
+work.
+
+***************
+Reference Guide
+***************
+
+Initializing the Upload Class
+=============================
+
+Like most other classes in CodeIgniter, the Upload class is initialized
+in your controller using the $this->load->library function::
+
+ $this->load->library('upload');
+
+Once the Upload class is loaded, the object will be available using:
+$this->upload
+
+Setting Preferences
+===================
+
+Similar to other libraries, you'll control what is allowed to be upload
+based on your preferences. In the controller you built above you set the
+following preferences::
+
+ $config['upload_path'] = './uploads/';
+ $config['allowed_types'] = 'gif|jpg|png';
+ $config['max_size'] = '100';
+ $config['max_width'] = '1024';
+ $config['max_height'] = '768';
+
+ $this->load->library('upload', $config);
+
+ // Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
+ $this->upload->initialize($config);
+
+The above preferences should be fairly self-explanatory. Below is a
+table describing all available preferences.
+
+Preferences
+===========
+
+The following preferences are available. The default value indicates
+what will be used if you do not specify that preference.
+
+============================ ================= ======================= ======================================================================
+Preference Default Value Options Description
+============================ ================= ======================= ======================================================================
+**upload_path** None None The path to the folder where the upload should be placed. The folder
+ must be writable and the path can be absolute or relative.
+**allowed_types** None None The mime types corresponding to the types of files you allow to be
+ uploaded. Usually the file extension can be used as the mime type.
+ Separate multiple types with a pipe.
+**file_name** None Desired file name If set CodeIgniter will rename the uploaded file to this name. The
+ extension provided in the file name must also be an allowed file type.
+**overwrite** FALSE TRUE/FALSE (boolean) If set to true, if a file with the same name as the one you are
+ uploading exists, it will be overwritten. If set to false, a number will
+ be appended to the filename if another with the same name exists.
+**max_size** 0 None The maximum size (in kilobytes) that the file can be. Set to zero for no
+ limit. Note: Most PHP installations have their own limit, as specified
+ in the php.ini file. Usually 2 MB (or 2048 KB) by default.
+**max_width** 0 None The maximum width (in pixels) that the file can be. Set to zero for no
+ limit.
+**max_height** 0 None The maximum height (in pixels) that the file can be. Set to zero for no
+ limit.
+**max_filename** 0 None The maximum length that a file name can be. Set to zero for no limit.
+**max_filename_increment** 100 None When overwrite is set to FALSE, use this to set the maximum filename
+ increment for CodeIgniter to append to the filename.
+**encrypt_name** FALSE TRUE/FALSE (boolean) If set to TRUE the file name will be converted to a random encrypted
+ string. This can be useful if you would like the file saved with a name
+ that can not be discerned by the person uploading it.
+**remove_spaces** TRUE TRUE/FALSE (boolean) If set to TRUE, any spaces in the file name will be converted to
+ underscores. This is recommended.
+============================ ================= ======================= ======================================================================
+
+Setting preferences in a config file
+====================================
+
+If you prefer not to set preferences using the above method, you can
+instead put them into a config file. Simply create a new file called the
+upload.php, add the $config array in that file. Then save the file in:
+config/upload.php and it will be used automatically. You will NOT need
+to use the $this->upload->initialize function if you save your
+preferences in a config file.
+
+******************
+Function Reference
+******************
+
+The following functions are available
+
+$this->upload->do_upload()
+===========================
+
+Performs the upload based on the preferences you've set. Note: By
+default the upload routine expects the file to come from a form field
+called userfile, and the form must be a "multipart type::
+
+ <form method="post" action="some_action" enctype="multipart/form-data" />
+
+If you would like to set your own field name simply pass its value to
+the do_upload function::
+
+ $field_name = "some_field_name";
+ $this->upload->do_upload($field_name);
+
+$this->upload->display_errors()
+================================
+
+Retrieves any error messages if the do_upload() function returned
+false. The function does not echo automatically, it returns the data so
+you can assign it however you need.
+
+Formatting Errors
+*****************
+
+By default the above function wraps any errors within <p> tags. You can
+set your own delimiters like this::
+
+ $this->upload->display_errors('<p>', '</p>');
+
+$this->upload->data()
+=====================
+
+This is a helper function that returns an array containing all of the
+data related to the file you uploaded. Here is the array prototype::
+
+ Array
+ (
+ [file_name] => mypic.jpg
+ [file_type] => image/jpeg
+ [file_path] => /path/to/your/upload/
+ [full_path] => /path/to/your/upload/jpg.jpg
+ [raw_name] => mypic
+ [orig_name] => mypic.jpg
+ [client_name] => mypic.jpg
+ [file_ext] => .jpg
+ [file_size] => 22.2
+ [is_image] => 1
+ [image_width] => 800
+ [image_height] => 600
+ [image_type] => jpeg
+ [image_size_str] => width="800" height="200"
+ )
+
+Explanation
+***********
+
+Here is an explanation of the above array items.
+
+Item
+Description
+**file_name**
+The name of the file that was uploaded including the file extension.
+**file_type**
+The file's Mime type
+**file_path**
+The absolute server path to the file
+**full_path**
+The absolute server path including the file name
+**raw_name**
+The file name without the extension
+**orig_name**
+The original file name. This is only useful if you use the encrypted
+name option.
+**client_name**
+The file name as supplied by the client user agent, prior to any file
+name preparation or incrementing.
+**file_ext**
+The file extension with period
+**file_size**
+The file size in kilobytes
+**is_image**
+Whether the file is an image or not. 1 = image. 0 = not.
+**image_width**
+Image width.
+**image_height**
+Image height
+**image_type**
+Image type. Typically the file extension without the period.
+**image_size_str**
+A string containing the width and height. Useful to put into an image
+tag.