当前位置: 首页 > 面试题库 >

在AJAX和jQuery中使用HTML5文件上传

洪高阳
2023-03-14
问题内容

诚然,Stack Overflow周围也存在类似的问题,但似乎没有一个完全符合我的要求。

这是我想要做的:

  • 上载整个数据格式,其中一个是 单个 文件
  • 使用Codeigniter的文件上传库

到这里为止,一切都很好。数据根据需要进入我的数据库。但我也想通过AJAX帖子提交表单:

  • 使用原生HTML5 File API,而不是Flash或iframe解决方案
  • 最好与低级.ajax()jQuery方法接口

我想我可以想象如何通过使用纯JavaScript来在字段的值更改时自动上传文件来实现此目的,但我宁愿一举完成,就可以在jQuery中提交。我认为不可能通过查询字符串来进行操作,因为我需要传递整个文件对象,但是此时我有点不知所措。

能做到吗?


问题答案:

不太难。首先,看一下FileReader接口。

因此,提交表单后,赶上提交过程,然后

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

然后,在服务器端(即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);

或类似的东西。我可能会弄错(如果我愿意,请纠正我),但这应将文件存储为1287916771myPicture.jpgin
/uploads/在您的服务器上,并continueSubmission()在服务器上使用包含fileName 的JSON变量(对函数)进行响应。

签出fwrite()jQuery.post()

在上一页中,它详细说明了如何使用readAsBinaryString()readAsDataUrl()readAsArrayBuffer()满足您的其他需求(例如图像,视频等)。



 类似资料:
  • 我得到以下异常 org.springframework.web.multipart.multipartexception:无法解析多部分servlet请求;嵌套异常为org.apache.commons.FileUpload.FileUploadException:请求被拒绝,因为未找到多部分边界。 这个插件工作得很好谢谢。 插件运行良好,现在我需要将少量表单字段与输入文件一起发送到控制器。在上面

  • 问题内容: 我已经进行了很多搜索,以了解如何使用Ajax从表单上载文件,并发现xhr2应该可以做到。但是,我已经尝试过使用FormData对象,但它不起作用。 这是一个简单的html表单 这是“ post.php”文件,当以“老式”方式运行时,它可以正常工作: 这是“ upload.js” 您知道为什么它不起作用吗?控制台返回“未发送文件”。 非常感谢 ! 问题答案: 尝试替换代码: 有了这个:

  • 问题内容: 我希望在用户使用$ .ajax在输入文件中选择文件时异步上传文件。但是接收调用返回索引的PHP未定义。jQuery代码是下一个: 以及调用该调用的php: 谢谢 问题答案: 您无法使用AJAX上传文件,但可以使用,因此不必刷新当前页面。 很多人都对插件束手无策,但您可以轻松完成此操作,并具有AJAX请求的所有功能。 不必使用AJAX函数,而是将表单提交到具有事件处理程序的隐藏文件中,以

  • 问题内容: 我正在尝试使用jQuery AJAX和通用处理程序上传图像文件。但是似乎文件没有被传递给处理程序。提交后始终为null:-/ 我究竟做错了什么? HTML: JS: ASHX: 问题答案: 设法使这个工作:) 这是我的代码…

  • 我试图通过使用FormData通过AJAX上传文件。如果我提交AJAX调用而没有选择任何要上传的文件,post工作正常,服务器上接收到其他字段(不是文件上传)。但是,如果我选择一个要上传的文件,调用到达服务器时没有任何数据(在PHP中,$_POST和$_FILES数组都是完全空的)。我知道如果您没有告诉jQuery不要设置contentType可能会发生这种情况,但是我将contentType和p

  • 问题内容: 我遇到了这个简单的js ajax上传代码(由于某种原因,jquery 似乎不适用于HTML5), 但是我这里有两个问题, 这条线在物体之后是什么意思? 为什么在那里需要ID?我能做些什么使用jQuery 用? 此ajax仅用于单个文件上传,如何更改多个文件上传? 问题答案: 这行在对象FormData之后是什么意思? 在得到由它的ID元件。该抓住从元件中的第一选择的文件。将其追加到与字