我本是征服了大海的男人,却摔死在 javascript 这片沙滩上

2015-07-09 18:46:54 +08:00
 liuxu
又在这美丽的夕阳下加班。
昨天室友面试遇到一个刁钻的JAVA题目,回来我用C重写,用gdb反汇编后用AT&T汇编代码和他讲解了程序的原理,为什么答案会是那样,讲完后我都觉得这个世界上没有我解决不了的问题。可是今天用javascript发送个post请求到一个php接口上,我倒下了,情况是这样的。。。
我有一个' <input type="file" id="myfile" /> '标签,点击上传文件后,需要post提交给我的a.php这个接口文件。我不能直接提交,必须用js动态生成一个form表单,然后把这个myfile的文件读到我动态生成的表单,然后提交到a.php。,第一种方法,我用 ' createElement("form") '这种方式,现在问题来了,新生成的' <input type="file" /> '里必须有一个' name="hhh" '属性,用这种方式我可以用' document.getElementById("myfile").files[0] '得到文件对象,可是却不知道怎么把得到的文件对象设置给动态生成的 ' <input type="file" /> '标签里。
第二种方法用ajax,用' var myfrm=new FormData() '生成表单,这种方式添加file标签,' myfrm.append("file",document.getElementById("myfile").files[0]); ',可是不知道怎么给它设置name属性,,更让我尴尬的是,我使用的ubuntu 14.04,浏览器是chrome 43.0.2357.130 (64-bit),文件在/home/liuxu/download/ 下,用alert输出input的value值却是“C:\fakepath\GDB调试入门教程.pdf”。。。
在这北京的天空之下,我都觉得我的夜晚连星星都不再亮了, 苦海无涯,回头无岸,,盼望着没有哪位js大神指点我一二,给我力量,让我披荆斩棘,不再被任何bug阻拦。
谢谢。
3549 次点击
所在节点    程序员
26 条回复
chagel
2015-07-09 20:06:04 +08:00
file input的value因为安全原因不能随意设,可以试试把老的input整个deep copy到新的form里(比如,参考jquery的clone方法)
liuzhen
2015-07-09 20:45:40 +08:00
@liuxu 那么你还可以尝试FileReader (不考虑兼容IE) 参考http://blog.csdn.net/oscar999/article/details/37499743
sampeng
2015-07-10 11:46:30 +08:00
前面一截是纯炫耀么。。。。
otakustay
2015-07-10 14:22:59 +08:00
第一个问题,input比较特殊,你很难用createElement创建,所以你最好的办法就是写innerHTML
第二个问题,input[file]的value是一个假的,这是防止XSS的浏览器安全控制

总之这个问题最好的解决办法就是用innerHTML写form出来
nine
2015-07-10 15:14:31 +08:00
欢迎使用$.post
dotudeth
2015-07-10 17:10:49 +08:00
查一下 new formdate

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/204545

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX