想用jquery发送请求到服务器,但是不知道选择文件之后,该用怎么样数据方式传送过去。看到jquery里面写的文件格式只有xml,html,json,jsonp,text等,其他的文件是要专程这些格式才可以的么,那么怎么去转呢,然后$.ajax{}该怎么去写,搜到的尽是form表单。貌似论坛的markdown上传图片中的是新创建了一个form表单,然后将file以post的方式交由upload.js处理的。有没有可能像这样的格式利用ajax上传,然后服务器返回文件存储的地址
<input type = “file” name = “image_upload”>
然后js来发送请求?
我用javascript做了一个简单的文件上传,看能否对你有帮助。
var xhr = new XMLHttpRequest();
xhr.addEventListener('progress', function(){
console.log('progress');
}, false);
xhr.addEventListener('load', function(){
console.log('load');
}, false);
xhr.open('post', '/upload', true);///upload为文件上传的接口
var fd = new FormData();
fd.append('upfile', photo.data.file);
fd.append('money', money);
fd.append('source', source);
fd.append('filename', photo.data.name);
xhr.send(fd);
jQuery方式好像有提供一个叫$.ajaxFileUpload的方式 上传可以google一下。
可以使用jquery.form 这个jquery插件
这个是文件内容是哪里传过去的哈,FormData是怎么去定义的?
那就是一定要使用form才可以提交?
fd.append('upfile', photo.data.file);
就是你要上传的文件可以直接把表单放进去,你可以查看一下FormData方法,不过好像只支持html5
@iln168 好的。多谢啦
@jialezhang 下面代码就是我的思路,你可以参考一下
$(function(){
$('#test').change(function(){
var file = this.files[0];
var formData = new FormData();
formData.append('filename', file);
$.ajax({
url : '/upload',
type : 'POST',
data: formData
});
});
});
单纯的用AJAX上传文件貌似只有HTML5才能支持,如果要支持所有的浏览器有两种办法,一是用iframe提交form,另外就是用flash,jQuery的ajaxFileUpload用的是flash,不过它用flash和js交互的方式获取了上传进度,效果还是不错的
关键问题不在于form,只要你能把数据按照HTTP协议的格式组装就OK,但目前来说任何方式最终都还是实现了一个form,把数据封装了。
@jialezhang 对要有form
HTML5貌似实现了ajax上传文件, 否则ajax是不能上传文件的, 目前所谓的ajax文件上传无非就是iframe/flash, 因为xhr没有multipart
嗯嗯,嘗試了下base64,還不錯
要的就是這個form
嗯嗯,發現了,所以一般還是得靠form
这个这个,真的可行吗。我在想可不可以把filename = /etc/passwd呢?