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: 526
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