使用Jasny文件输入使用PHP将文件上传到服务器

时间:2014-01-27 10:14:17

标签: php jquery twitter-bootstrap file-upload twitter-bootstrap-3

我正在实施Jasny File Input插件。但是,我无法将其上传到服务器。

HTML

<form method="post" id="formCreateMod" class="form form-horizontal" enctype="multipart/form-data" role="form">
    <div class="fileinput fileinput-new" data-provides="fileinput">
         <div class="fileinput-preview thumbnail" data-trigger="fileinput"></div>
         <div>
              <span class="btn btn-default btn-file"><span class="fileinput-new">Select image</span><span class="fileinput-exists">Change</span><input type="file" name="img"></span>
              <a href="#" class="btn btn-default fileinput-exists" data-dismiss="fileinput">Delete</a>
         </div>
    </div>
</form>

以上代码段位于<form>标记内。然后我在jQuery中使用post将表单的序列化数据发送到服务器。

我希望使用$_FILES['img']["name"]$_FILES['img']["type"]来获取php中的内容,但结果为NULL

那么在发布图像后我应该如何在php中检索图像数据呢?

任何帮助将不胜感激!

更新

以下是我在jQuery中发布表单的方法。

var theForm = $('form');
$.post(location.href, theForm.serialize(), function(data) {
    // handle return data
});

1 个答案:

答案 0 :(得分:7)

您无法使用ajax发布文件并进行序列化。

您应该查看this answer来解释原因。

但是,您仍然有解决方案:

  • 不使用ajax,只使用表单
  • 上的enctype='multipart/form-data'属性提交表单
<form [...] enctype='multipart/form-data'></form>
var formData = new FormData();

// HTML file input user's choice...
formData.append("userfile", fileInputElement.files[0]);

var request = new XMLHttpRequest();
request.open("POST", "http://foo.com/submitform.php");
request.send(formData);
var reader = new FileReader();

reader.onload = function(e) {
  var rawData = reader.result;
}

reader.readAsBinaryString(file);