访问 PHP 服务器上的 FormData 文件 (symfony)
Accessing FormData file on the PHP server (symfony)
我的问题是在使用 FormData 发出 ajax 请求后,我不知道如何在服务器端获取文件和文件名。让我补充一点,另一方面,它适用于字符串。我还通过 FireBug.
在请求中看到了文件和详细信息
这是我的代码:
JavaScript:
var form = document.getElementById('file-form');
var fileSelect = document.getElementById('file-select');
var uploadButton = document.getElementById('upload-button');
// Get the selected files from the input.
var files = fileSelect.files;
// Create a new FormData object.
var formData = new FormData();
var myArray = [];
// Loop through each of the selected files.
for (var i = 0; i < files.length; i++) {
var file = files[i];
console.log(file.name);
myArray[i] = file.name;
// Check the file type.
if (!file.type.match('image.*')) {
continue;
}
// Add the file to the request.
formData.append('photos[]', file, file.name);
}
var xhr = new XMLHttpRequest();
// Open the connection.
xhr.open('POST',
'http://localhost/amsprojektgit/amsprojekt/admin/web/fileupload', true);
xhr.onload = function () {
if (xhr.status === 200) {
// File(s) uploaded.
alert('Files uploaded');
} else {
alert('An error occurred!');
}
};
xhr.send(formData);
服务器端PHP(Symfony2 容器)
public function fileUpload(Request $request)
{
$upload = $_POST;
$logger = $this->get('logger');
$logger->info($upload);
$logger->error('');
die();
}
通过 FireBug 的响应如下所示:
----------------------------269272101016568
Content-Disposition:表单数据;名字="photos";文件名="elektpolaniec2.jpg"
内容类型:image/jpeg
ÿØÿà�JFIF����H����ÿá@Exif��II*������������������������r���� ��z��(��������
��������������2��������
������ ���� ��1��(����©��i������$�� ������0220�� ����0100 ������ ������
��������������������X�������������������������������������� ������'����
������
������··························
����!��¢��������£������£������������������ ��������������)����
������������������������������������
¤.......... ����÷������H������
�H������2014:02:28 11:05:03�Panasonic�DMC-FX01�PaintShop Pro 15,00��������������������� ������2013
:06:20 15:42:46�2013:06:20 15:42:46�
它不记录任何内容。您知道如何访问已发送文件的文件名和文件本身的内容吗?
谢谢回答。
嗯.. 简而言之 PHP 文件存储在临时目录中,文件信息通过 $_FILES 数组提供。
在 Symfony 中,我们不希望直接使用超全局数组,但我们可以使用 Request object. For file uploads you should read this.
你的问题
在你的 JS 中你有
formData.append('photos[]', file, file.name);
所以这意味着 symfony 将把它放在一个数组中作为 photos.
$uploads = $request->files->get('photos');
$uploads
是一个文件对象数组。您将需要遍历 $uploads
并处理每个文件。
旁注
如果您不希望在一个请求中上传多个,而只想 上传 ,而不是数组,则将您的 JS 更改为:
formData.append('photo', file, file.name);
然后在 Symfony 中你会使用
$upload = $request->files->get('photo');
并且$upload
是一个文件引用
我的问题是在使用 FormData 发出 ajax 请求后,我不知道如何在服务器端获取文件和文件名。让我补充一点,另一方面,它适用于字符串。我还通过 FireBug.
在请求中看到了文件和详细信息这是我的代码:
JavaScript:
var form = document.getElementById('file-form');
var fileSelect = document.getElementById('file-select');
var uploadButton = document.getElementById('upload-button');
// Get the selected files from the input.
var files = fileSelect.files;
// Create a new FormData object.
var formData = new FormData();
var myArray = [];
// Loop through each of the selected files.
for (var i = 0; i < files.length; i++) {
var file = files[i];
console.log(file.name);
myArray[i] = file.name;
// Check the file type.
if (!file.type.match('image.*')) {
continue;
}
// Add the file to the request.
formData.append('photos[]', file, file.name);
}
var xhr = new XMLHttpRequest();
// Open the connection.
xhr.open('POST',
'http://localhost/amsprojektgit/amsprojekt/admin/web/fileupload', true);
xhr.onload = function () {
if (xhr.status === 200) {
// File(s) uploaded.
alert('Files uploaded');
} else {
alert('An error occurred!');
}
};
xhr.send(formData);
服务器端PHP(Symfony2 容器)
public function fileUpload(Request $request)
{
$upload = $_POST;
$logger = $this->get('logger');
$logger->info($upload);
$logger->error('');
die();
}
通过 FireBug 的响应如下所示:
----------------------------269272101016568 Content-Disposition:表单数据;名字="photos";文件名="elektpolaniec2.jpg" 内容类型:image/jpeg
ÿØÿà�JFIF����H����ÿá@Exif��II*������������������������r���� ��z��(�������� ��������������2�������� ������ ���� ��1��(����©��i������$�� ������0220�� ����0100 ������ ������ ��������������������X�������������������������������������� ������'���� ������ ������·························· ����!��¢��������£������£������������������ ��������������)���� ������������������������������������ ¤.......... ����÷������H������ �H������2014:02:28 11:05:03�Panasonic�DMC-FX01�PaintShop Pro 15,00��������������������� ������2013 :06:20 15:42:46�2013:06:20 15:42:46�
它不记录任何内容。您知道如何访问已发送文件的文件名和文件本身的内容吗?
谢谢回答。
嗯.. 简而言之 PHP 文件存储在临时目录中,文件信息通过 $_FILES 数组提供。
在 Symfony 中,我们不希望直接使用超全局数组,但我们可以使用 Request object. For file uploads you should read this.
你的问题
在你的 JS 中你有
formData.append('photos[]', file, file.name);
所以这意味着 symfony 将把它放在一个数组中作为 photos.
$uploads = $request->files->get('photos');
$uploads
是一个文件对象数组。您将需要遍历 $uploads
并处理每个文件。
旁注
如果您不希望在一个请求中上传多个,而只想 上传 ,而不是数组,则将您的 JS 更改为:
formData.append('photo', file, file.name);
然后在 Symfony 中你会使用
$upload = $request->files->get('photo');
并且$upload
是一个文件引用