This repository has been archived by the owner on May 25, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Uploading to nginx using the nginx upload module with php_handler
MK edited this page Aug 8, 2014
·
2 revisions
I have been searching a long time how to get the upload_handler from the verybasic
example to work with the nginx uploadmodule. So here is my solution:
First my nginx.conf file :
server { client_max_body_size 4G; client_body_buffer_size 1024k; listen 80; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm index.php; # Make site accessible from http://localhost/ server_name localhost; location @frontcontroller { rewrite ^ /index.php last; } location = /progress { report_uploads uploads; } location /upload { # the location of the php handler upload_pass /jQueryFileUpload/server/php/index.php; # the location where the files are uploaded upload_store /var/tmp/fuploads; upload_store_access user:rw; upload_state_store /var/tmp/fuploads/state ; # Set specified fields in request body # the field data will be available through the superglobal $_POST[] upload_set_form_field "${upload_field_name}_name" $upload_file_name; upload_set_form_field "${upload_field_name}_content_type" $upload_content_type; upload_set_form_field "${upload_field_name}_path" $upload_tmp_path; upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5; upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size; upload_pass_form_field "^submit$|^description$"; track_uploads uploads 5s; } location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
Once this is done you have to open up the verybasic.php
file and look for the input field - the name of the input field will be the prefix name in our $_POST[]
variable.
I call mine simple “files”:
<input id="fileupload" type="file" name="files" data-url="/upload" >
Then the last step is to adapt the Uploadhandler.php
.
- Replace the
post
function.
You can delete everything in the post
function and replace it with something like this:
public function post($print_response = true) { $prefix = files; //our name of the input field if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') { return $this->delete($print_response); } $files = array(); $files = $this->new_handle_file_upload($prefix); return $this->new_generate_response(array('files' => $files)); }
- As you can see in the above code, we have to add two new functions:
protected function new_handle_file_upload($prefix) { $file = new stdClass(); $file->name = $_POST[$prefix."_name"]; $file->type = $_POST[$prefix."_content_type"]; $file->url = $_POST[$prefix."_path"]; $file->size = $_POST[$prefix."_size"]; $file->error = 'success'; $this->set_additional_file_properties($file); $s[]=$file; return $s; }
protected function new_generate_response($content) { $this->head(); $json = json_encode($content); $this->body($json); return content; }
This is it , hopefully a lot of people will enjoy it.
Thank you