<html><head></head><body><div class="ydpe8c54d07yahoo-style-wrap" style=""><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2">Hi All,<br><br>I am new to NGINX webserver. I am trying to up host my websites using NGINX webserver. The backend is Perl CGI scripts (i am using fcgiwrap for the handling the CGI requests).</font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2">I am finding difficulty with file upload. The file is loaded to the temporary location specificied in the NGINX config but upload is not working. File is present in the final destination folder with the correct filename but the size of the file is zero.<br><br>Any help is much appreciated.</font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2">NGINX config -></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style=""><font size="2" style=""><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;"> </span>location ~ /bin/diag/upload {</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><br></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">               </span># Store files to this directory </font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">         </span>upload_store /alex/pil/upload 1;</font></div><div style=""><span style="font-family: courier new, courier, monaco, monospace, sans-serif; white-space: pre-wrap;">             </span><span style="font-family: courier new, courier, monaco, monospace, sans-serif;">upload_store_access user:rw group:rw all:rw;</span><br></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><br></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">              </span># Pass altered request body to this location</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">          </span>upload_pass @fastcgi;</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">         </span>upload_pass_args on;</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><br></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">                </span># Set specified fields in request body</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">                </span>upload_set_form_field $upload_field_name "$upload_file_name";</font></div><div style=""><span style="font-family: courier new, courier, monaco, monospace, sans-serif; white-space: pre-wrap;">              </span><span style="font-family: courier new, courier, monaco, monospace, sans-serif;">upload_set_form_field $upload_field_name.name "$upload_file_name";</span><br></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">                </span>upload_set_form_field $upload_field_name.content_type "$upload_content_type";</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">               </span>upload_set_form_field $upload_field_name.path "$upload_tmp_path";</font></div><div style=""><span style="white-space: pre-wrap;"><font face="courier new, courier, monaco, monospace, sans-serif">           </font></span></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">              </span># Inform backend about hash and size of a file</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">                </span>upload_aggregate_form_field $upload_field_name.size "$upload_file_size";</font></div><div style=""><br></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">                </span>#Pass all fields of the form</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">          </span>upload_pass_form_field ".*";</font></div><div style=""><span style="font-family: courier new, courier, monaco, monospace, sans-serif; white-space: pre-wrap;">               </span><br></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">         </span>upload_cleanup 400 404 499 500-505;</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span style="white-space: pre-wrap;">   </span>}</font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><br></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><div><span style="white-space: pre-wrap;">    </span>location @fastcgi {</div><div><span style="white-space: pre-wrap;">            </span>fastcgi_index<span style="white-space: pre-wrap;"> </span>index;</div><div><span style="white-space: pre-wrap;">         </span>fastcgi_intercept_errors on;</div><div><br></div><div><span style="white-space: pre-wrap;">          </span>fastcgi_pass<span style="white-space: pre-wrap;">  </span>unix:/tmp/cgi.sock;<br></div><div><span style="white-space: pre-wrap;">          </span>fastcgi_param<span style="white-space: pre-wrap;"> </span>SCRIPT_FILENAME $document_root$fastcgi_script_name;</div><div><span style="white-space: pre-wrap;">            </span>include<span style="white-space: pre-wrap;">               </span>/etc/nginx/fastcgi_params;<span style="white-space: pre-wrap;">            </span></div><div><span style="white-space: pre-wrap;">       </span>}</div><div><br></div></span><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;">Upload Perl Script is -></span></span><br></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;"><br></span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;">Parameters to the perl subroutine are</span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;">1. HTML form name.</span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;">2. destination folder to which the file should be uploaded.</span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;">3. Name of the file when it is placed in the destination.</span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;"><br></span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="font-size: small;"><div style="color: rgb(0, 0, 0);">sub UploadFile</div><div style="color: rgb(0, 0, 0);">{</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">    </span>binmode(STDIN);</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;"> </span>my $fh;</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;"> </span>my ( $form, $destfolder, $destname ) = @_;</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">      </span>my ( $handle );</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;"> </span>my ( $filename );</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">       </span>system("logger -p user.debug -t diag.upload UploadFile: @_ ");</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">        </span>system("logger -p user.debug -t diag.upload UploadFile: $form ");</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">     </span>system("logger -p user.debug -t diag.upload UploadFile: $destfolder ");</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">       </span>system("logger -p user.debug -t diag.upload UploadFile: $destname ");</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;"> </span>$handle = upload($form);</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">        </span>$filename = $destfolder."/".$destname;</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">        </span>unless ( open( $fh, '>', "$filename") ) {</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">          </span>system("logger -p user.debug -t diag.upload UploadFile: Error while opening file '$filename' for write. Error: $!. [$0 -> $$]");</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">           </span>return;</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;"> </span>}</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">       </span>binmode $fh;</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">    </span>while (<$handle>)</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;"> </span>{<br></div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">             </span>print $fh $_;</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">   </span>}</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;">       </span>close($handle);</div><div style="color: rgb(0, 0, 0);"><span style="white-space: pre-wrap;"> </span>close($fh);</div><div style="color: rgb(0, 0, 0);">}</div><div style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><br></div><div style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">Parameters passed to the Upload File Subroutine- ></div><div style=""><div style="">Apr  1 10:06:52 (none) user.debug diag.upload: UploadFile: <font color="#cd232c">datasheet /alex/pil/www/html/dataman datasheet.pdf</font></div><div style="color: rgb(0, 0, 0);">Apr  1 10:06:52 (none) user.debug diag.upload: UploadFile: datasheet</div><div style="color: rgb(0, 0, 0);">Apr  1 10:06:52 (none) user.debug diag.upload: UploadFile: /alex/pil/www/html/dataman</div><div style="color: rgb(0, 0, 0);">Apr  1 10:06:52 (none) user.debug diag.upload: UploadFile: datasheet.pdf</div><div style="color: rgb(0, 0, 0);"><br></div><div style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">HTML form related data - ></div><div style=""><div style=""> <div style="">                      <font color="#cd232c"><form name="upload" method="post" action="/bin/diag/upload" enctype="multipart/form-data"></font></div><div style="color: rgb(0, 0, 0);">                        <input type="hidden" name="uploadtype" value="2"></div><div style="color: rgb(0, 0, 0);">                        <table border="0" width="90%"></div><div style="color: rgb(0, 0, 0);">                          <tr></div><div style="color: rgb(0, 0, 0);">                            <td width="20%">Datasheet</td></div><div style=""><span style="color: rgb(0, 0, 0);">                            </span><font color="#cd232c"><td width="40%"><input type="file" name="datasheet"><br></td></font></div><div style="color: rgb(0, 0, 0);">                            <td width="40%"></div><div style="color: rgb(0, 0, 0);"> </div><br></div><div style=""><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;">Error occurs during the upload  - ></span></span><br></div></div><div style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><br></div><div style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">File handle is not returned when upload() is called with the HTML form name.</div><div style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><span><span style="color: rgb(0, 0, 0); font-family: courier new, courier, monaco, monospace, sans-serif; font-size: small;">$handle = upload($form);</span></span><br></div><br></div><div style=""><span><div>FastCGI sent in stderr: "Use of uninitialized value $handle in <HANDLE> at /alex/bin/diag/upload line 275.</div><div> at /lxi/pil/www/bin/diag/upload line 275.</div><div><span style="white-space: pre-wrap;"> </span>main::UploadFile("datasheet", "/lxi/pil/www/html/dataman", "datasheet.pdf") called at /alex/bin/diag/upload line 137" while reading response header from upstream, client: 192.168.2.130, server: localhost, request: "POST /bin/diag/upload HTTP/1.1", upstream: "fastcgi://unix:/tmp/cgi.sock:", host: "192.168.2.145", referrer: "http://192.168.2.145/bin/diag/stage2"</div><div><br></div><div><span><div style="color: rgb(0, 0, 0); font-family: courier new, courier, monaco, monospace, sans-serif; font-size: small;"><span style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">Do i have to add anymore changes in the NGINX config so that the form data based file handler can be retrieved by the Perl CGI upload function?</span><br></div><div><span style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><br></span></div><div><span style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">Any help is much appreciated?</span></div><div><span style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><br></span></div><div><span style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">Thanks,<br>Alex.</span></div></span><br></div></span><br></div><br></span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;"><br></span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;"><br></span></span></font></div><div style=""><font face="courier new, courier, monaco, monospace, sans-serif"><span><span style="color: rgb(0, 0, 0); font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: small;"><br></span></span></font></div><div style=""><br></div><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div><div style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><font size="2"><br></font></div></div></body></html>