访问 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是一个文件引用