诚然,在堆栈溢出上也存在类似的问题,但似乎没有一个完全符合我的要求.

Here is what I'm looking to do:

  • 上传完整形式的数据,其中一个是single文件
  • Work with Codeigniter's file upload library

直到现在,一切都很好.数据在我需要的时候进入我的数据库.但我也想通过AJAX帖子提交我的表格:

  • 使用原生HTML5文件API,而不是flash或iframe解决方案
  • Preferably interfacing with the low-level .ajax() jQuery method

我想我可以想象如何使用纯javascript在字段值发生变化时自动上传文件,但我宁愿在jQuery中提交时一次性完成.我认为通过查询字符串是不可能的,因为我需要传递整个文件对象,但我现在有点不知所措.

Can this be achieved?

推荐答案

It's not too hard. Firstly, take a look at FileReader Interface.

因此,当表单提交时,捕获深渊翻滚进程并

var file = document.getElementById('fileBox').files[0]; //Files[0] = 1st file
var reader = new FileReader();
reader.readAsText(file, 'UTF-8');
reader.onload = shipOff;
//reader.onloadstart = ...
//reader.onprogress = ... <-- Allows you to update a progress bar.
//reader.onabort = ...
//reader.onerror = ...
//reader.onloadend = ...


function shipOff(event) {
    var result = event.target.result;
    var fileName = document.getElementById('fileBox').files[0].name; //Should be 'picture.jpg'
    $.post('/myscript.php', { data: result, name: fileName }, continueSubmission);
}

Then, on the server side (i.e. myscript.php):

$data = $_POST['data'];
$fileName = $_POST['name'];
$serverFile = time().$fileName;
$fp = fopen('/uploads/'.$serverFile,'w'); //Prepends timestamp to prevent overwriting
fwrite($fp, $data);
fclose($fp);
$returnData = array( "serverFile" => $serverFile );
echo json_encode($returnData);

或者类似的.我可能弄错了(如果我错了,请纠正我),但这应该在您的服务器上以类似/uploads/1287916771myPicture.jpg的格式存储文件,并使用包含服务器上文件名的JSON变量(对continueSubmission()函数)进行响应.

Check out fwrite() and jQuery.post().

On the above page it details how to use readAsBinaryString(), readAsDataUrl(), and readAsArrayBuffer() for your other needs (e.g. images, videos, etc).

Jquery相关问答推荐

逐个交换图像

使用 JQuery 在 span 标签中用逗号分隔页面上的文本

ASP.NET MVC - Ajax 将空值传递给控制器

jQueryUI 模态对话框不显示关闭按钮 (x)

在 jQuery 事件中控制this的值

使用 jQuery 按文本内容 Select 选项

未捕获的类型错误:$.post 不是函数

scrollIntoView 是否适用于所有浏览器?

$(document).on('click', '#id', function() {}) 与 $('#id').on('click', function(){})

如何判断元素是否在屏幕外

Twitter Bootstrap css 类的 jQuery show() 隐藏

C# String.IsNullOrEmpty Javascript 等效项

如何在 JQuery 中 Select 除单击元素之外的所有类?

CSS3 相当于 jQuery slideUp 和 slideDown?

JavaScript 等效于 jQuery 的扩展方法

在未实现接口 FormData 的对象上调用附加

为什么要使用发布/订阅模式(在 JS/jQuery 中)?

Jquery Select 器输入[type=text]')

AJAX 成功中的 $(this) 不起作用

jQuery:通过 .attr() 添加两个属性;方法