CNode

ajax上传文件是怎么实现的

Jjialezhang发布于14 年前最后回复14 年前15 回复39730 浏览0 收藏

想用jquery发送请求到服务器,但是不知道选择文件之后,该用怎么样数据方式传送过去。看到jquery里面写的文件格式只有xml,html,json,jsonp,text等,其他的文件是要专程这些格式才可以的么,那么怎么去转呢,然后$.ajax{}该怎么去写,搜到的尽是form表单。貌似论坛的markdown上传图片中的是新创建了一个form表单,然后将file以post的方式交由upload.js处理的。有没有可能像这样的格式利用ajax上传,然后服务器返回文件存储的地址

然后js来发送请求?

查看回复

回复 (15)

D
dolphinboy#1·14 年前

关键问题不在于form,只要你能把数据按照HTTP协议的格式组装就OK,但目前来说任何方式最终都还是实现了一个form,把数据封装了。

J
javanode#2·14 年前
X
xujun52011#3·14 年前

HTML5貌似实现了ajax上传文件, 否则ajax是不能上传文件的, 目前所谓的ajax文件上传无非就是iframe/flash, 因为xhr没有multipart

I
iln168#7·14 年前

我用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一下。

J
javanode#8·14 年前

可以使用jquery.form 这个jquery插件

J
jialezhang#10·14 年前
引用 javanode可以使用jquery.form 这个jquery插件

那就是一定要使用form才可以提交?

I
iln168#11·14 年前
引用 iln168我用javascript做了一个简单的文件上传,看能否对你有帮助。 var xhr = new XMLHttpRequest(); xhr.addEventListener('progress...

@jialezhang

fd.append('upfile', photo.data.file);

就是你要上传的文件可以直接把表单放进去,你可以查看一下FormData方法,不过好像只支持html5

I
iln168#13·14 年前
引用 iln168我用javascript做了一个简单的文件上传,看能否对你有帮助。 var xhr = new XMLHttpRequest(); xhr.addEventListener('progress...

@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
              });

          });
      });
W
windinsky#14·14 年前

单纯的用AJAX上传文件貌似只有HTML5才能支持,如果要支持所有的浏览器有两种办法,一是用iframe提交form,另外就是用flash,jQuery的ajaxFileUpload用的是flash,不过它用flash和js交互的方式获取了上传进度,效果还是不错的

H
hhuai#15·14 年前

这个这个,真的可行吗。我在想可不可以把filename = /etc/passwd呢?

参与回复
登录后即可参与回复。登录