ajax上传文件是怎么实现的
发布于 2年前 作者 jialezhang 5115 次浏览

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

<input type = "file" name = "image_upload">

然后js来发送请求?

15 回复

我用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才可以提交?

@jialezhang

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

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

@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,把数据封装了。

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

嗯嗯,嘗試了下base64,還不錯

要的就是這個form

嗯嗯,發現了,所以一般還是得靠form

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

回到顶部