我有一个简单的表格:
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" id="MAX_FILE_SIZE">
<input type="file" name="file_upload" id="file_upload" class="picture_main">
<input type="submit" name="upload_picture" id="upload_picture" value="Submit">
我正在尝试上传ajax:
submit.on("click", function(){
var file = $('#file_upload').val();
uploadImageAjax(file);
return false;
});
var uploadmageAjax = function(file)
{
$.ajax({
type: "POST",
url: "/test/index/imageupload",
data: {
'file': file
},
dataType: "json",
success: function (data) {
console.log(data);
}
});
}
我得到的回报是,例如file: "C:\fakepath\weirdan003-10.jpeg"
但我不确定fakepath
是什么!
如果我只在php中这样做,我会得到这样的图像:
if (isset($_POST['upload_picture']) ) {
$data = $formImageUpload->getValues();
$pictureName = $data['picture'];
....
然后上传它。
所以我想弄清楚的是,如果ajax将该操作的POST调用为正确的文件,那么我就可以将其上传到磁盘。
将$('#file_upload').val();
持有$ _FILE ??
任何想法?
感谢
答案 0 :(得分:3)
var file = $('#file_upload').val();
这将仅返回客户端计算机上的文件路径。出于安全原因,它会像c:\ fakepath \ file_name.ext一样返回。如果我没记错的话,在一些旧的浏览器中,可以获得真正的路径。但是,它仍然无法帮助您在服务器上获取文件。
对于ajax样式上传,您可以使用推荐的一些插件。或者只使用jQuery Forms插件。它的工作方式与$.ajax
非常相似。
现在,正确上传文件后,您会在$_FILES
在您的情况下,它将类似$_FILES['file_upload']
,其中'file_upload'是文件输入的名称。
现在,您可以使用move_uploaded_file将其从临时存储中移出。并使用该文件做任何你想做的事情
修改强> 而且我看到你正在使用Zend。请查看this有关如何在服务器端使用FileUpload元素的信息。使用Zend,您可以使用FileUpload方法而不是move_uploaded_file
答案 1 :(得分:0)
jQuery ajax不支持异步文件上传。请参阅jQuery upload file using jQuery's ajax method (without plugins)。
如果您想使用ajax文件上传,建议您实施插件:
答案 2 :(得分:0)
对于客户端,我建议您使用插件。
对于服务器端,您需要处理它以从流中读取。我认为valums git上有一个完整的示例(客户端和服务器端)。