jQuery上传进度和AJAX文件上传

jQuery上传进度和AJAX文件上传,第1张

jQuery上传进度和AJAX文件上传

这些天实际上可以使用AJAX上传文件。是的,AJAX,而不是诸如SWF或Java之类的cr脚的AJAX技术。

此示例可能会帮助您:https :
//webblocks.nl/tests/ajax/file-drag-
drop.html

(它还包含拖放界面,但很容易忽略。)

基本上可以归结为:

<input id="files" type="file" /><script>document.getElementById('files').addEventListener('change', function(e) {    var file = this.files[0];    var xhr = new XMLHttpRequest();    (xhr.upload || xhr).addEventListener('progress', function(e) {        var done = e.position || e.loaded        var total = e.totalSize || e.total;        console.log('xhr progress: ' + Math.round(done/total*100) + '%');    });    xhr.addEventListener('load', function(e) {        console.log('xhr upload complete', e, this.responseText);    });    xhr.open('post', '/URL-HERE', true);    xhr.send(file);});</script>

(演示:http :
//jsfiddle.net/rudiedirkx/jzxmro8r/)

所以基本上可以归结为这个=)

xhr.send(file);

file
typeof 在哪里
Blob
:http :
//www.w3.org/TR/FileAPI/

另一种(更好的IMO)方法是使用

FormData
。这样一来,您可以(1)以某种形式命名文件,以及(2)以表单形式发送其他内容(也有文件)。

var fd = new FormData;fd.append('photo1', file);fd.append('photo2', file2);fd.append('other_data', 'foo bar');xhr.send(fd);

FormData
使服务器代码更整洁并向后兼容(因为请求现在具有与普通表单完全相同的格式)。

所有这些都不是实验性的,而是非常现代的。Chrome 8+和Firefox 4+知道该怎么办,但我不知道其他任何人。

这就是我在PHP中处理请求的方式(每个请求1张图片):

if ( isset($_FILES['file']) ) {    $filename = basename($_FILES['file']['name']);    $error = true;    // only upload if on my home win dev machine    if ( isset($_SERVER['WINDIR']) ) {        $path = 'uploads/'.$filename;        $error = !move_uploaded_file($_FILES['file']['tmp_name'], $path);    }    $rsp = array(        'error' => $error, // Used in JS        'filename' => $filename,        'filepath' => '/tests/uploads/' . $filename, // Web accessible    );    echo json_enpre($rsp);    exit;}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5029653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存