为什么getClientOriginalName()无法获得上载文件的原始名称?

时间:2019-04-03 17:29:26

标签: symfony filenames email-attachments

要将上传的文件附加到电子邮件中,请使用getClientOriginalName()函数,并且在收到的电子邮件中,文件名始终是基本名,没有扩展名。

我使用在https://hotexamples.com/site/redirect?url=https%3A%2F%2Fgithub.com%2Falexander-schranz%2Fsulu-website-user-bundle中找到的代码 我尝试了多种方式来编写原始名称的搜索,但发现总是相同的基本名称 我的功能是:

public function send($from, $to, $sujet, $body, $attachments = [])
    {
    $message = new \Swift_Message($sujet, $body);
    $message->setFrom($from);
    $message->setTo($to);
    if (count($attachments) > 0) {
        foreach ($attachments as $file) {
            switch ($file) {
...
                    case $file instanceof UploadedFile:
                        $nomfic = $file->getClientOriginalName();             
                        break;
                        }
    $message->attach(\Swift_Attachment::fromPath($path),$nomfic);

附件转储的开头是:

 0 => UploadedFile {#16 ▼
    -test: false
    -originalName: "etiquettes.pdf"
    -mimeType: "application/pdf"
    -error: 0
    path: "/tmp"
    filename: "php4Koz9N"
    basename: "php4Koz9N"
    pathname: "/tmp/php4Koz9N"

我希望使用“ etiquettes.pdf”而不是“ php4Koz9N”!

我该怎么办?

1 个答案:

答案 0 :(得分:1)

getClientOriginalName在浏览器中返回名称上传的文件(警告!这是不安全的)。实际文件位于/tmp/phpXXXXX中。

所以,您的代码可能是...

<?php

$attach = \Swift_Attachment::fromPath($uploadedfile->getRealPath(), $uploadedfile->getMimeType());
$attach->setFilename($uploadedfile->getClientOriginalName()); # Only if you rely in your client. That is, never!
$message->attach($attach);
相关问题