http request to cgi python script successful, but the script doesn't seem to run
        Posted  
        
            by 
                chipChocolate.py
            
        on Ask Ubuntu
        
        See other posts from Ask Ubuntu
        
            or by chipChocolate.py
        
        
        
        Published on 2014-08-24T19:31:57Z
        Indexed on 
            2014/08/24
            22:33 UTC
        
        
        Read the original article
        Hit count: 637
        
I have configured cgi scripts for my apache2 web server.
Here is what I want to do:
- Client uploads the image to the server. (this already works)
- On success, I want to execute the python script to resize the image.
I tried the following and the success function does execute but my python script does not seem to execute:
Javascript code that sends the request:
var input = document.getElementById('imageLoader');
imageName = input.value;
var file = input.files[0];
if(file != undefined){
  formData= new FormData();
  console.log(formData.length);
  if(!!file.type.match(/image.*/)){
    formData.append("image", file);
    $.ajax({
      url: "upload.php",
      type: "POST",
      processData: false,
      contentType: false,
      success: function() {
        var input = document.getElementById('imageLoader');
        imageName = input.value;
        var file = input.files[0];
        formData = new FormData();
        formData.append("filename", file);
        $.ajax({
          url: "http://localhost/Main/cgi-bin/resize.py",
          type: "POST",
          data: formData,
          processData: false,
          contentType: false,
          success: function(data) {
            console.log(data);
          }
        });
        // code continues...
resize.py:
#!/usr/bin/python
import cgi
import cgitb
import Image
cgitb.enable()
data = cgi.FieldStorage()
filename = data.getvalue("filename")
im = Image.open("../JS/upload/" + filename)
(width, height) = im.size
maxWidth = 600
maxHeight = 400
if width > maxWidth:
    d = float(width) / maxWidth
    height = int(height / d)
    width = maxWidth
if height > maxHeight:
    d = float(height) / maxHeight
    width = int(width / d)
    height = maxHeight
size = (width, height)
im = im.resize(size, Image.ANTIALIAS)
im.save("../JS/upload/" + filename, quality=100)
This is the apache2.conf:
<Directory /var/www/html/Main/cgi-bin>
    AllowOverride None
    Options +ExecCGI
    SetHandler cgi-script
    AddHandler cgi-script .py .cgi
    Order allow,deny
    Allow from all
</Directory>
cgi-bin and python script file permissions:
drwxrwxr-x  2 mou mou 4096 Aug 24 03:28 cgi-bin
-rwxrwxrwx 1 mou mou 1673 Aug 24 03:28 resize.py
Edit:
Executing this code
$.ajax({
    url: "http://localhost/Main/cgi-bin/resize.py",
    type: "POST",
    data: formData,     // formData = {"filename" : "the filename which was saved in a variable whie the image was uploaded"}
    processData: false,
    contentType: false,
    success: function(data) {
        alert(data);
    }
});
it alerts the following:
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> -->
<body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> -->
</font> </font> </font> </script> </object> </blockquote> </pre>
</table> </table> </table> </table> </table> </font> </font> </font><body bgcolor="#f0f0f8">
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#6622aa">
<td valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"> <br><big><big><strong><type 'exceptions.TypeError'></strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial">Python 2.7.6: /usr/bin/python<br>Sun Aug 24 17:24:15 2014</font></td></tr></table>
<p>A problem occurred in a Python script.  Here is the sequence of
function calls leading up to the error, in the order they occurred.</p>
<table width="100%" cellspacing=0 cellpadding=0 border=0>
<tr><td bgcolor="#d8bbff"><big> </big><a href="file:///var/www/html/Main/cgi-bin/resize.py">/var/www/html/Main/cgi-bin/resize.py</a> in <strong><module></strong>()</td></tr>
<tr><td><font color="#909090"><tt>  <small>   10</small> <br>
</tt></font></td></tr>
<tr><td><font color="#909090"><tt>  <small>   11</small> filename = data.getvalue("filename")<br>
</tt></font></td></tr>
<tr><td bgcolor="#ffccee"><tt>=><small>   12</small> im = Image.open("../JS/upload/" + filename)<br>
</tt></td></tr>
<tr><td><font color="#909090"><tt>  <small>   13</small> <br>
</tt></font></td></tr>
<tr><td><font color="#909090"><tt>  <small>   14</small> (width, height) = im.size<br>
</tt></font></td></tr>
<tr><td><small><font color="#909090">im <em>undefined</em>, <strong>Image</strong> = <module 'Image' from '/usr/lib/python2.7/dist-packages/PILcompat/Image.pyc'>, Image.<strong>open</strong> = <function open>, <strong>filename</strong> = '<font color="#c040c0">\xff\xd8\xff\xe0\x00\x10</font>JFIF<font color="#c040c0">\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00</font>C<font color="#c040c0">\x00\x06\x04\x05\x06\x05\x04\x06\x06\x05\x06\x07\x07\x06\x08\n\x10\n\n\t\t\n\x14\x0e</font>...<font color="#c040c0">\x94\r\x17\x11</font>b<font color="#c040c0">\xcd\xdc\x1a\xfe\xf1\x05\x1b\x15\xd1</font>R<font color="#c040c0">\xce\xe9</font>*<font color="#c040c0">\xb5\x8e</font>b<font color="#c040c0">\x97\x82\x87</font>R<font color="#c040c0">\xf4\xaa</font>K<font color="#c040c0">\x83</font>6<font color="#c040c0">\xbf\xfb</font>0<font color="#c040c0">\xa0\xb6</font>8<font color="#c040c0">\xa9</font>C<font color="#c040c0">\x86\x8d\x96</font>n+E<font color="#c040c0">\xd3\x7f\x99\xff\xd9</font>'</font></small></td></tr></table>
<table width="100%" cellspacing=0 cellpadding=0 border=0>
<tr><td bgcolor="#d8bbff"><big> </big><a href="file:///usr/lib/python2.7/dist-packages/PIL/Image.py">/usr/lib/python2.7/dist-packages/PIL/Image.py</a> in <strong>open</strong>(fp='../JS/upload/<font color="#c040c0">\xff\xd8\xff\xe0\x00\x10</font>JFIF<font color="#c040c0">\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00</font>C<font color="#c040c0">\x00\x06\x04\x05\x06\x05\x04\x06\x06\x05\x06</font>...<font color="#c040c0">\x94\r\x17\x11</font>b<font color="#c040c0">\xcd\xdc\x1a\xfe\xf1\x05\x1b\x15\xd1</font>R<font color="#c040c0">\xce\xe9</font>*<font color="#c040c0">\xb5\x8e</font>b<font color="#c040c0">\x97\x82\x87</font>R<font color="#c040c0">\xf4\xaa</font>K<font color="#c040c0">\x83</font>6<font color="#c040c0">\xbf\xfb</font>0<font color="#c040c0">\xa0\xb6</font>8<font color="#c040c0">\xa9</font>C<font color="#c040c0">\x86\x8d\x96</font>n+E<font color="#c040c0">\xd3\x7f\x99\xff\xd9</font>', mode='r')</td></tr>
<tr><td><font color="#909090"><tt>  <small> 1994</small>     if isPath(fp):<br>
</tt></font></td></tr>
<tr><td><font color="#909090"><tt>  <small> 1995</small>         filename = fp<br>
</tt></font></td></tr>
<tr><td bgcolor="#ffccee"><tt>=><small> 1996</small>         fp = builtins.open(fp, "rb")<br>
</tt></td></tr>
<tr><td><font color="#909090"><tt>  <small> 1997</small>     else:<br>
</tt></font></td></tr>
<tr><td><font color="#909090"><tt>  <small> 1998</small>         filename = ""<br>
</tt></font></td></tr>
<tr><td><small><font color="#909090"><strong>fp</strong> = '../JS/upload/<font color="#c040c0">\xff\xd8\xff\xe0\x00\x10</font>JFIF<font color="#c040c0">\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00</font>C<font color="#c040c0">\x00\x06\x04\x05\x06\x05\x04\x06\x06\x05\x06</font>...<font color="#c040c0">\x94\r\x17\x11</font>b<font color="#c040c0">\xcd\xdc\x1a\xfe\xf1\x05\x1b\x15\xd1</font>R<font color="#c040c0">\xce\xe9</font>*<font color="#c040c0">\xb5\x8e</font>b<font color="#c040c0">\x97\x82\x87</font>R<font color="#c040c0">\xf4\xaa</font>K<font color="#c040c0">\x83</font>6<font color="#c040c0">\xbf\xfb</font>0<font color="#c040c0">\xa0\xb6</font>8<font color="#c040c0">\xa9</font>C<font color="#c040c0">\x86\x8d\x96</font>n+E<font color="#c040c0">\xd3\x7f\x99\xff\xd9</font>', <em>global</em> <strong>builtins</strong> = <module '__builtin__' (built-in)>, builtins.<strong>open</strong> = <built-in function open></font></small></td></tr></table><p><strong><type 'exceptions.TypeError'></strong>: file() argument 1 must be encoded string without NULL bytes, not str
<br><tt><small>     </small> </tt>args =
('file() argument 1 must be encoded string without NULL bytes, not str',)
<br><tt><small>     </small> </tt>message =
'file() argument 1 must be encoded string without NULL bytes, not str'
<!-- The above is a description of an error in a Python program, formatted
     for a Web browser because the 'cgitb' module was enabled.  In case you
     are not reading this in a Web browser, here is the original traceback:
Traceback (most recent call last):
  File "/var/www/html/Main/cgi-bin/resize.py", line 12, in <module>
    im = Image.open("../JS/upload/" + filename)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1996, in open
    fp = builtins.open(fp, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
-->
Does this mean that the formData I am sending over is empty?
© Ask Ubuntu or respective owner