$.ajax Sending File formdata along with variables
我正尝试按照本教程中的步骤创建一个简单的jquery文件上传:http://net.tutspus.com/tutorials/javascript-ajax/uploading-files-with-ajax/,它功能齐全且非常出色。但是,我希望对用户可以上载的图像有更多的控制和安全性,例如,我希望能够发送一个令牌。这是我的原始代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | $('#images').change(function (evt) { $('#response').text("Uploading . . ."); var amount = this.files.length; var reader, file; alert(formdata); for (var i = 0; i < amount; i++ ) { file = this.files[i]; if (!!file.type.match(/image.*/)) { if ( window.FileReader ) { reader = new FileReader(); reader.onloadend = function (e) { appendUploadedPic(e.target.result, file.fileName); }; reader.readAsDataURL(file); } if (formdata) { formdata.append("images[]", file); } } } if (formdata) { $.ajax({ url:"php/upload.php", type:"POST", data: formdata, dataType:'json', processData: false, contentType: false, success: function (res) { $('#response').html(res['image_name']); } }); } }); |
到目前为止,PHP很简单
1 2 3 4 5 6 7 8 9 | foreach ($_FILES["images"]["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $name = $_FILES["images"]["name"][$key]; move_uploaded_file( $_FILES["images"]["tmp_name"][$key],"../members/" . $_FILES['images']['name'][$key]); } } $respond = array("filename" => $_FILES["images"]["name"][0],"type" =>"image"); echo json_encode($respond); |
现在我想做的是
1 2 3 4 5 6 7 8 9 10 11 | $.ajax({ url:"php/upload.php", type:"POST", data: 'token=someToken&code=upload&data='+formdata, dataType:'json', processData: false, contentType: false, success: function (res) { $('#response').html(res); } }); |
有可能吗?如果是,我如何从PHP中读取它?它是一个post方法,我通常使用一个$_post['code']和一个$_post'token'],但是我如何读取images formdata对象?
如果
1 | formdata.append(name, value); |
因此,如果要添加一个令牌字段和一个代码字段,它是:
1 2 3 4 5 | if (formdata) { formdata.append("images[]", file); formdata.append("token","someToken"); formdata.append("code","someCode"); } |
但是,您应该知道,这种上传方法不会得到很多浏览器的支持,即IE6-IE9,我相信它代表了大约一半的互联网用户。
我建议使用一个插件来检测浏览器支持并使用最佳可用方法。我写这个插件就是为了这个目的:
https://github.com/lpology/simple-ajax-uploader
顶部有一个演示链接,可供试用。如果你决定使用它并遇到任何问题,我和我就可以帮你解决。祝你好运。