【发布时间】:2017-08-02 23:42:51
【问题描述】:
我正在尝试使用 jQuery/AJAX/Laravel 从拖放事件中上传多个文件。
我的掉落事件:
$( document ).on('drop dragleave', '.file-drag', function(e){
$(this).removeClass('drop-ready');
if(e.originalEvent.dataTransfer.files.length) {
e.preventDefault();
e.stopPropagation();
if (e.type === "drop") {
var files = e.originalEvent.dataTransfer.files;
AjaxFileUpload(files)
}
}
});
我的上传脚本:
function AjaxFileUpload(files){
console.log(files);
//Start appending the files to the FormData object.
var formData = new FormData;
formData.append('_token', CSRF_TOKEN);
for(var i = 0; i < files.length; i++){
formData.append(files[i].name, files[i])
}
console.log(formData.entries());
$.ajax({
//Server script/controller to process the upload
url: 'upload',
type: 'POST',
// Form data
data: formData,
// Tell jQuery not to process data or worry about content-type
// You *must* include these options!
cache: false,
contentType: false,
processData: false,
// Error logging
error: function(jqXHR, textStatus, errorThrown){
console.log(JSON.stringify(jqXHR));
console.log('AJAX Error: ' + textStatus + ": " + errorThrown);
},
// Custom XMLHttpRequest
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
// For handling the progress of the upload
myXhr.upload.addEventListener('progress', function(e) {
if (e.lengthComputable) {
$('progress').attr({
value: e.loaded,
max: e.total,
});
}
} , false);
}
return myXhr;
},
success: function(data){
console.log(data);
}
});
}
我的控制器代码:
class UploadsController extends Controller
{
public function UploadFiles(Request $request){
return $request->all();
}
}
我认为我的图像正在到达服务器端,因为当我返回请求对象时,我在控制台中得到以下信息:
因此,CSRF 令牌正在通过,图像(我认为?)正在通过。我的问题是使用 PHP 访问文件并通过 ->store(); 存储它们。
在无数的在线/文档示例中,他们通常使用以下内容:
$path = $request->photo->store('images');
但是,我不明白其中的“照片”方面。如果上传了视频或 PDF 文件怎么办?我基本上不明白如何访问请求对象的不同部分。 Laravel 网站上的文档对此非常稀少,仅给出了一个使用“照片”的示例,它从未解释过。
【问题讨论】: