【发布时间】:2014-12-09 09:56:29
【问题描述】:
关于使用 Android 上传文件有很多问题,但大多数都没有答案,实际上它们都与 javascript 或 php 无关。 在 Android (4.4.4) 本机浏览器 (HTC One_M8) 上选择要上传的文件时,我看到了奇怪的行为,它给我的是这个;
C:\fakepath\image:12045
“Fakepath”部分并不困扰我,困扰我的是我无法从 /input type="file"/ html 标签中获取文件名。 我正在使用 $.ajax 发送文件,它适用于 Chrome、FF、Safari(桌面和 iPhone),它也适用于带有 Chrome 的 M8,但不适用于本机浏览器。
这是我用来获取选定文件的;
var filedata = document.getElementById("userFile");
formdata = false;
if (window.FormData) {
formdata = new FormData();
}
var i = 0, len = filedata.files.length, img, reader, file;
for (; i < len; i++) {
file = filedata.files[i];
if (window.FileReader) {
reader = new FileReader();
reader.onloadend = function(e) {
// showUploadedItem(e.target.result, file.fileName);
};
reader.readAsDataURL(file);
}
if (formdata) {
formdata.append("userFile[]", file);
}
}
这就是我将它们发送到 handle.php 的方式
$.ajax({
url: 'handle.php',
type: 'POST',
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){
}
return myXhr;
},
data: formdata,
dataType:'json',
cache: false,
contentType: false,
processData: false,
beforeSend: function(xhr, opt) {
$('#control-console').append($('input[type=file]').val());
$('input[type=file]').val("");
},
success: function() {
},
complete: function(podatki) {
$('#control-console').append(podatki.responseJSON.name);
console.log(podatki)
$.each(podatki.responseJSON.name, function(i, val) {
console.log(val);
insertFrame(val);
});
processing = false;
}
});
我没有找到任何关于此的文档,所以我真的不知道这是 Android 原生浏览器中的错误还是我必须使用不同的方法。
有没有人遇到过同样的问题,也许找到了解决方案?
【问题讨论】:
-
您对此有什么解决方案吗?对于pdf文件,我在android中遇到了同样的问题。文件名是假文件名,文件类型为空。
-
其实我做过,如果你使用jQuery文件上传脚本(github),你不会遇到这个问题。上面的代码我从来没有真正适用于所有手机和平板电脑,所以最好保留它并使用 jQ 脚本。
标签: javascript php android jquery