使用 Dropzone.js & Laravel 上传 PDF。有的上传成功,有的return是个空对象?
Uploading PDF's using Dropzone.js & Laravel. Some upload successfully, others return an empty object?
我正在尝试使用 Dropzone.js 将一些文件上传到运行 Laravel 4.2 的 PHP 环境。我遇到了一个非常令人困惑的错误,其中 某些 PDF 会成功上传,而其他人不会 。
当我说有些上传不成功时,我的意思是上传后 Input::all()
中可用的内容:
[file] => Symfony\Component\HttpFoundation\File\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => presskit.pdf
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => application/octet-stream
[size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 1
[pathName:SplFileInfo:private] =>
[fileName:SplFileInfo:private] =>
)
您会立即注意到,有些事情是错误的:
- mimetype 被定义为
application/octect-stream
。这表示无法解析实际的 mimetype。
- 文件大小为
0
。
- 错误是
1
。
然而,在向服务器发出请求期间,我可以非常清楚地看到我的请求是以 application/pdf
:
的 mimetype 发送的
-----------------------------6541909715113
Content-Disposition: form-data; name="file"; filename="presskit.pdf"
Content-Type: application/pdf
这是发送到服务器的数据的开始。在客户端,我可以在所有浏览器中复制它。这是我的 dropzone.js 功能:
Dropzone.options.uploadedFilesDropzone = {
autoProcessQueue: false,
maxFilesize: 1024, //MB
addRemoveLinks: true,
init: function() {
var uploadedFilesDropzone = this;
$('#submit').on('click', function() {
uploadedFilesDropzone.processQueue();
});
}
successmultiple: function(files, message) {
var uploadedFilesDropzone = this;
console.log(files);
var wereAnyFilesErrored = false;
$.each(files, function(index, file) {
if (!message.errors) {
file.previewElement.classList.add('dz-success');
console.log(message);
} else {
wereAnyFilesErrored = true;
var node, _i, _len, _ref, _results;
if (file.previewElement) {
file.previewElement.classList.add("dz-error");
if (typeof message !== "String" && message.error) {
message = message.error;
}
_ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
node = _ref[_i];
_results.push(node.textContent = message);
}
}
}
});
if (wereAnyFilesErrored === true) {
$.each(files, function(index, file) {
file.status = 'queued';
console.log(file);
});
}
}
}
此外,PDF 是否正确上传似乎没有任何区别。一开始我以为可能和保存的PDF版本有关,但是1.4和1.6都可以成功也可以失败。
谁能告诉我这是怎么回事?
一些 php 安装对文件上传有非常严格的限制。它可能只是文档的大小。你能检查一下你的 php.ini 吗?
条目将如下所示:
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
我正在尝试使用 Dropzone.js 将一些文件上传到运行 Laravel 4.2 的 PHP 环境。我遇到了一个非常令人困惑的错误,其中 某些 PDF 会成功上传,而其他人不会 。
当我说有些上传不成功时,我的意思是上传后 Input::all()
中可用的内容:
[file] => Symfony\Component\HttpFoundation\File\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => presskit.pdf
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => application/octet-stream
[size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 1
[pathName:SplFileInfo:private] =>
[fileName:SplFileInfo:private] =>
)
您会立即注意到,有些事情是错误的:
- mimetype 被定义为
application/octect-stream
。这表示无法解析实际的 mimetype。 - 文件大小为
0
。 - 错误是
1
。
然而,在向服务器发出请求期间,我可以非常清楚地看到我的请求是以 application/pdf
:
-----------------------------6541909715113
Content-Disposition: form-data; name="file"; filename="presskit.pdf"
Content-Type: application/pdf
这是发送到服务器的数据的开始。在客户端,我可以在所有浏览器中复制它。这是我的 dropzone.js 功能:
Dropzone.options.uploadedFilesDropzone = {
autoProcessQueue: false,
maxFilesize: 1024, //MB
addRemoveLinks: true,
init: function() {
var uploadedFilesDropzone = this;
$('#submit').on('click', function() {
uploadedFilesDropzone.processQueue();
});
}
successmultiple: function(files, message) {
var uploadedFilesDropzone = this;
console.log(files);
var wereAnyFilesErrored = false;
$.each(files, function(index, file) {
if (!message.errors) {
file.previewElement.classList.add('dz-success');
console.log(message);
} else {
wereAnyFilesErrored = true;
var node, _i, _len, _ref, _results;
if (file.previewElement) {
file.previewElement.classList.add("dz-error");
if (typeof message !== "String" && message.error) {
message = message.error;
}
_ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
node = _ref[_i];
_results.push(node.textContent = message);
}
}
}
});
if (wereAnyFilesErrored === true) {
$.each(files, function(index, file) {
file.status = 'queued';
console.log(file);
});
}
}
}
此外,PDF 是否正确上传似乎没有任何区别。一开始我以为可能和保存的PDF版本有关,但是1.4和1.6都可以成功也可以失败。
谁能告诉我这是怎么回事?
一些 php 安装对文件上传有非常严格的限制。它可能只是文档的大小。你能检查一下你的 php.ini 吗?
条目将如下所示:
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M