无法使用ajax/javascript将文件上传到perl脚本
Can not upload file to perl script using ajax/javascript
我有一个表单,它采用sinlge文件映像上传到使用binmode读取和保存的perl脚本。perl脚本似乎没有得到文件流(文件大小最终为0字节)。我不确定我是否将html输入中的正确名称/ref传递/使用到javascript formdata.append中。我暂时避免使用jquery和xhr版本2的解决方案。如果可能的话,我决心把这件事做好。
html输入
<input id="newimg" type="file" onchange="changeimg(this.value,dbtable,dbid);">
javascript
function changeimg(filename,dbtable,dbid) {
// ignor "c:'fakepath'" in filename
var filename = document.getElementById('newimg').files[0].name;
var formdata = new FormData();
formdata.append("Content-Type", "multipart/form-data");
formdata.append("dbtable",dbtable);
formdata.append("dbid",dbid);
formdata.append("filename",filename);
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
var xhr = new XMLHttpRequest();
} else {
// code for IE6, IE5
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("POST","/uploader.pl",true);
xhr.send(formdata);
}
我目前正在使用的perl代码段。在"非javascript"页面表单提交下,这段代码对我来说一直很好。
#
my $upload_filehandle = $cgi->upload("filename");
#
open (UPLOADFILE, ">$newfile");
binmode UPLOADFILE;
while ( <$upload_filehandle> ) {
print UPLOADFILE;
}
close UPLOADFILE;
#
您使用的任何变量都没有引用该文件。这就是为什么它没有被包括在内。
与其尝试发送文件名,不如发送输入。
替换:
formdata.append("filename",filename);
带有:
var file = document.getElementById("newimg").files[0];
formdata.append("newimg", file);
更好的是,停止手动获取数据,只需一次性发送整个表单:
<input id="newimg" name="newimg" type="file" onchange="changeimg(this.form)">
和
function changeimg(form) {
var formdata = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.open("POST","/uploader.pl",true);
xhr.addEventListener("load", function () { alert("Loaded"); });
xhr.send(formdata);
}
好的,多亏了@Quentin的例子,我能够使用这些更改使其工作。我仍然需要附加dbtable和dbid,因为它们不是可变的。
新的html输入
<input type="file" name="filename" onchange="changeimg(this.form,dbtable,dbid);">
新的javascript
function changeimg(form,table,id) {
var formdata = new FormData(form);
formdata.append("item",id);
formdata.append("table",table);
var xhr = new XMLHttpRequest();
xhr.open("POST","/uploader.pl",true);
xhr.addEventListener("load", function () { alert("Loaded"); });
xhr.send(formdata);
}
perl脚本没有更改
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 不显示带有本地json文件数据的谷歌地图脚本
- 导入jQuery脚本获胜'我不处理html文件
- 如何将模板中的标记脚本移动到.js文件中
- 在以前的文件夹中加载脚本
- 如何运行从TFS获取项目的windows脚本文件
- Yii2从js脚本的页面上添加来自供应商文件夹的图像、css、js文件
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- 从我自己的脚本中包含的Javascript文件中调用一个函数
- 在HTML中,如果第二次加载相同的脚本文件,它还会被加载吗
- Project和作为web应用程序发布的多个doGet()脚本文件——需要澄清
- jQuery getScript与在文件中嵌入脚本
- 什么's使用脚本标记调用文件和ajax之间的区别
- HTML文件脚本和CSS放置
- Google 云端硬盘:孤立文件脚本在包含所有文件之前就已停止
- 是否可以在没有PHP的情况下创建上传文件脚本(并被服务器接受)
- JS文件脚本错误:缺少;before语句<Script1.js#1>
- 未加载外部文件脚本
- 如何从网页中检索查询字符串.ASPX到我的HTML文件脚本
- 如何在php文件/脚本中使用node.js代码