【发布时间】:2019-11-22 19:30:31
【问题描述】:
我想将 blob URL AKA (window.URL.createObjectURL(blob);) 转换为文件对象,以便可以将它与 FormData() 一起使用,这样我就可以将其用作 AJAX 的上传图像文件,但我是无法成功地做到这一点,我找不到将 blob URL 放入文件的方法
针对我的代码情况,我知道根据我在这里访问的帖子可以做到这一点,这是可以做到的帖子之一,声称你可以做到这一点How to convert Base64 String to javascript file object like as from file input form? 但我不这样做的原因使用这些帖子方法中的任何一个,因为我不知道如何将它们的方法集成到我的代码情况中,或者它太复杂而无法理解。
这是我一直在编写的代码。
index.php
<script>
document.addEventListener('DOMContentLoaded',function(){
document.querySelector('#image-input').addEventListener('change',createABlobUrlForAImgSrcAndUseThatAsAFileUploadFile);
function createABlobUrlForAImgSrcAndUseThatAsAFileUploadFile(){
//Creating a blob URL
var image_input = document.querySelector('#image-input').files[0];
var file_type= image_input.type;
var blob = new Blob([image_input], { type: file_type || 'application/*'});
var blob_url= window.URL.createObjectURL(blob); //<-Example blob:http://localhost/ed6761d2-2bb4-4f97-a6d8-a35c84621ba5
//
//Form data
var formData= new FormData();
formData.append('blob_url', blob_url);
//
//<AJAX>
var xhr= new XMLHttpRequest();
xhr.onreadystatechange= function(){
if(xhr.readyState == 4){
document.querySelector('#output').innerHTML= xhr.responseText;
//<Allow JS in AJAX request>
var exJS= document.querySelectorAll('#output script');
var enableAll= exJS.length;
for(var i=0; i < enableAll.length; i++){
eval(exJS[i].text);
}
//</Allow JS in AJAX request>
}
}
xhr.open('POST','x');
xhr.send(formData);
//</AJAX>
}
});
</script>
<input id='image-input' type='file'>
<div id='output'></div>
x.php
<?php
$file=$_FILES['blob_url']['name'];
$location='images/'.$file;
move_uploaded_file($_FILES['blob_url']['tmp_name'],$location);
?>
我知道我的代码在逻辑上不正确,我必须更改我的代码才能做我想做的事情,所以我知道它在逻辑上不正确。只是想向你们展示我的意思。
【问题讨论】:
-
@user9375528 你有什么解决办法吗?
标签: javascript php ajax