将任何base64文件转换为文件并移动到php / Symfony 4中的目标路径

2024-02-09

预先感谢我正在创建 APIsymfony 4只是上传base64 image或通过任何文件POSTMAN我必须将文件移动到目标目录。我在控制器中编写了以下代码。通过控制器我试图将文件移动到目录,但是

我收到的错误如下:

未捕获的警告:file_put_contents(images/5c78de505abdd.svg):无法打开流:没有这样的文件或目录{“例外”:“[对象](ErrorException(代码:0):警告:file_put_contents(images/5c78de505abdd.svg):无法打开流:/home/ragiththomas/Sites/asco-forum/src/Modules/Forum/ForumController.php:1107)"} [] 没有此类文件或目录

POSTMAN 请求 svg 文件:

{"postFile":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICdodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQnPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAzLjU0MyAyMDMuNTQzIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjAzLjU0MyAyMDMuNTQzIj4KICA8Zz4KICAgIDxwYXRoIGZpbGw9IiMwMDQ1N2MiIGQ9Im0xOTQuMTM5LDExLjkxOGgtMzkuMzE1di01LjkxOGMwLTMuMzEzLTIuNjg3LTYtNi02cy02LDIuNjg3LTYsNnY1LjkxOGgtMzUuMDUzdi01LjkxOGMwLTMuMzEzLTIuNjg3LTYtNi02cy02LDIuNjg3LTYsNnY1LjkxOGgtMzMuNTYzdi01LjkxOGMwLTMuMzEzLTIuNjg3LTYtNi02cy02LDIuNjg3LTYsNnY1LjkxOGgtNDAuODA0Yy0zLjMxMywwLTYsMi42ODctNiw2djEzNS41NzJjMCwzLjMxMyAyLjY4Nyw2IDYsNmgzNi44MjZjNS45MDEsMjUuMjE0IDI4LjU1NSw0NC4wNTMgNTUuNTQxLDQ0LjA1M3M0OS42NC0xOC44NCA1NS41NDEtNDQuMDUzaDM2LjgyNmMzLjMxMywwIDYtMi42ODcgNi02di0xMzUuNTcyYzAuMDAxLTMuMzEzLTIuNjg1LTYtNS45OTktNnptLTE0My45MzEsMTJ2NS40MjJjMCwzLjMxMyAyLjY4Nyw2IDYsNnM2LTIuNjg3IDYtNnYtNS40MjJoMzMuNTYzdjUuNDIyYzAsMy4zMTMgMi42ODcsNiA2LDZzNi0yLjY4NyA2LTZ2LTUuNDIyaDM1LjA1M3Y1LjQyMmMwLDMuMzEzIDIuNjg3LDYgNiw2czYtMi42ODcgNi02di01LjQyMmgzMy4zMTV2MjQuNTM2aC0xNzIuNzM1di0yNC41MzZoMzQuODA0em01MS41NjMsMTY3LjYyNWMtMjQuODQyLDAtNDUuMDUzLTIwLjIxMS00NS4wNTMtNDUuMDUzczIwLjIxMS00NS4wNTMgNDUuMDUzLTQ1LjA1MyA0NS4wNTMsMjAuMjEgNDUuMDUzLDQ1LjA1My0yMC4yMSw0NS4wNTMtNDUuMDUzLDQ1LjA1M3ptNTcuMDI4LTQ0LjA1M2MwLjAwNi0wLjMzNCAwLjAyNS0wLjY2NSAwLjAyNS0xIDAtMzEuNDU5LTI1LjU5NC01Ny4wNTMtNTcuMDUzLTU3LjA1M3MtNTcuMDUzLDI1LjU5NC01Ny4wNTMsNTcuMDUzYzAsMC4zMzUgMC4wMiwwLjY2NiAwLjAyNSwxaC0yOS4zNHYtODcuMDM1aDE3Mi43MzV2ODcuMDM1aC0yOS4zMzl6Ii8+CiAgICA8cGF0aCBmaWxsPSIjMDA0NTdjIiBkPSJtMTA3Ljc3MSwxNDguMDA0di0yOS4wMjZjMC0zLjMxMy0yLjY4Ny02LTYtNnMtNiwyLjY4Ny02LDZ2MzEuNTEyYzAsMS41OTEgMC42MzIsMy4xMTcgMS43NTcsNC4yNDNsMTMuNzksMTMuNzkxYzEuMTcyLDEuMTcxIDIuNzA3LDEuNzU3IDQuMjQzLDEuNzU3IDEuNTM1LDAgMy4wNzEtMC41ODYgNC4yNDMtMS43NTcgMi4zNDMtMi4zNDMgMi4zNDMtNi4xNDIgMC04LjQ4NWwtMTIuMDMzLTEyLjAzNXoiLz4KICA8L2c+Cjwvc3ZnPgo="}

控制器文件:

/**
* @route("/uploadForumFiles", name="upload_forum_files", methods="POST")
*
* @access public
*
* @return JsonResponse
*/
public function uploadForumFiles(Request $request, PostsInterceptor $apiInterceptor, ContainerInterface $container): JsonResponse {
try {
$fileContent = $requestDtoObj->postFile;
$target_dir = 'images/'; // add the specific path to save the file
$decoded_file = base64_decode($fileContent); // decode the file
$mime_type = finfo_buffer(finfo_open(), $decoded_file, FILEINFO_MIME_TYPE); // extract mime type
$extension = $this->mime2ext($mime_type); // extract extension from mime type
$file = uniqid() .'.'. $extension; // rename file as a unique name
$file_dir = $target_dir. uniqid().'.'.$extension;
file_put_contents($target_dir, $file);
echo $file_dir; die;
} catch (Exception $ex) {

        $this->logger->writeLog("ERROR", "Exception while uploading a file " . $ex->getMessage() . 'at line - ' . $ex->getLine() . ' in file' . $ex->getFile());
        return $this->responseHandler->getFailedResponse(array($ex->getMessage()), $apiInterceptor);
    }
}




public function mime2ext($mime){
$all_mimes = '{"png":["image/png","image/x-png"],"bmp":["image/bmp","image/x-bmp",
"image/x-bitmap","image/x-xbitmap","image/x-win-bitmap","image/x-windows-bmp",
"image/ms-bmp","image/x-ms-bmp","application/bmp","application/x-bmp",
"application/x-win-bitmap"],"gif":["image/gif"],"jpeg":["image/jpeg",
"image/pjpeg"],"xspf":["application/xspf+xml"],"vlc":["application/videolan"],
"wmv":["video/x-ms-wmv","video/x-ms-asf"],"au":["audio/x-au"],
"ac3":["audio/ac3"],"flac":["audio/x-flac"],"ogg":["audio/ogg",
"video/ogg","application/ogg"],"kmz":["application/vnd.google-earth.kmz"],
"kml":["application/vnd.google-earth.kml+xml"],"rtx":["text/richtext"],
"rtf":["text/rtf"],"jar":["application/java-archive","application/x-java-application",
"application/x-jar"],"zip":["application/x-zip","application/zip",
"application/x-zip-compressed","application/s-compressed","multipart/x-zip"],
"7zip":["application/x-compressed"],"xml":["application/xml","text/xml"],
"svg":["image/svg+xml","application/octet-stream"],"3g2":["video/3gpp2"],"3gp":["video/3gp","video/3gpp"],
"mp4":["video/mp4"],"m4a":["audio/x-m4a"],"f4v":["video/x-f4v"],"flv":["video/x-flv"],
"webm":["video/webm"],"aac":["audio/x-acc"],"m4u":["application/vnd.mpegurl"],
"pdf":["application/pdf"],
"pptx":["application/vnd.openxmlformats-officedocument.presentationml.presentation"],
"ppt":["application/powerpoint","application/vnd.ms-powerpoint","application/vnd.ms-office",
"application/msword"],"docx":["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
"xlsx":["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"],
"xl":["application/excel"],"xls":["application/msexcel","application/x-msexcel","application/x-ms-excel",
"application/x-excel","application/x-dos_ms_excel","application/xls","application/x-xls"],
"xsl":["text/xsl"],"mpeg":["video/mpeg"],"mov":["video/quicktime"],"avi":["video/x-msvideo",
"video/msvideo","video/avi","application/x-troff-msvideo"],"movie":["video/x-sgi-movie"],
"log":["text/x-log"],"txt":["text/plain"],"css":["text/css"],"html":["text/html"],
"wav":["audio/x-wav","audio/wave","audio/wav"],"xhtml":["application/xhtml+xml"],
"tar":["application/x-tar"],"tgz":["application/x-gzip-compressed"],"psd":["application/x-photoshop",
"image/vnd.adobe.photoshop"],"exe":["application/x-msdownload"],"js":["application/x-javascript"],
"mp3":["audio/mpeg","audio/mpg","audio/mpeg3","audio/mp3"],"rar":["application/x-rar","application/rar",
"application/x-rar-compressed"],"gzip":["application/x-gzip"],"hqx":["application/mac-binhex40",
"application/mac-binhex","application/x-binhex40","application/x-mac-binhex40"],
"cpt":["application/mac-compactpro"],"bin":["application/macbinary","application/mac-binary",
"application/x-binary","application/x-macbinary"],"oda":["application/oda"],
"ai":["application/postscript"],"smil":["application/smil"],"mif":["application/vnd.mif"],
"wbxml":["application/wbxml"],"wmlc":["application/wmlc"],"dcr":["application/x-director"],
"dvi":["application/x-dvi"],"gtar":["application/x-gtar"],"php":["application/x-httpd-php",
"application/php","application/x-php","text/php","text/x-php","application/x-httpd-php-source"],
"swf":["application/x-shockwave-flash"],"sit":["application/x-stuffit"],"z":["application/x-compress"],
"mid":["audio/midi"],"aif":["audio/x-aiff","audio/aiff"],"ram":["audio/x-pn-realaudio"],
"rpm":["audio/x-pn-realaudio-plugin"],"ra":["audio/x-realaudio"],"rv":["video/vnd.rn-realvideo"],
"jp2":["image/jp2","video/mj2","image/jpx","image/jpm"],"tiff":["image/tiff"],
"eml":["message/rfc822"],"pem":["application/x-x509-user-cert","application/x-pem-file"],
"p10":["application/x-pkcs10","application/pkcs10"],"p12":["application/x-pkcs12"],
"p7a":["application/x-pkcs7-signature"],"p7c":["application/pkcs7-mime","application/x-pkcs7-mime"],"p7r":["application/x-pkcs7-certreqresp"],"p7s":["application/pkcs7-signature"],"crt":["application/x-x509-ca-cert","application/pkix-cert"],"crl":["application/pkix-crl","application/pkcs-crl"],"pgp":["application/pgp"],"gpg":["application/gpg-keys"],"rsa":["application/x-pkcs7"],"ics":["text/calendar"],"zsh":["text/x-scriptzsh"],"cdr":["application/cdr","application/coreldraw","application/x-cdr","application/x-coreldraw","image/cdr","image/x-cdr","zz-application/zz-winassoc-cdr"],"wma":["audio/x-ms-wma"],"vcf":["text/x-vcard"],"srt":["text/srt"],"vtt":["text/vtt"],"ico":["image/x-icon","image/x-ico","image/vnd.microsoft.icon"],"csv":["text/x-comma-separated-values","text/comma-separated-values","application/vnd.msexcel"],"json":["application/json","text/json"]}';

$all_mimes = json_decode($all_mimes,true);
foreach ($all_mimes as $key => $value) {
    if(array_search($mime,$value) !== false) return $key;
}
return false;

}

file_put_contents如果文件不存在,则创建该文件,但如果尝试将该文件放入不存在的目录中,则会失败。所以你应该尝试以下方法:

  • 检查是否images目录存在
  • 检查目录的写权限
  • 尝试使用绝对路径,所以在你的情况下可能$target_dir = '/home/ragiththomas/Sites/asco-forum/images/';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将任何base64文件转换为文件并移动到php / Symfony 4中的目标路径 的相关文章

  • 如何编写在正文中包含锚标记的 Zend Framework URL?

    使用 Zend Framework 中设置的标准 MVC 我希望能够显示始终具有锚点的页面 现在我只是在 phtml 文件中添加一个带有 anchor 的无意义参数
  • 如何在没有引用的情况下复制对象?

    PHP5 OOP 有据可查对象通过引用传递 http php net manual en language oop5 references php默认情况下 如果这是默认的 在我看来 有一种非默认的方式可以在没有参考的情况下进行复制 如何
  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • 为什么 PHP 中不允许“传统”类型提示?

    刚刚发现类型提示 http php net manual en language oop5 typehinting phpPHP 中允许 但不适用于整数 字符串 布尔值或浮点数 为什么 PHP 不允许对整数 字符串等类型进行类型提示 从 P
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • 具有更改用户代理上下文的 file_get_contents 不起作用

    我正在尝试获取页面的阅读数和点赞数 网址是 https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg 您必
  • 如何在 Twitter Card 中传递动态图像路径?

    我在用
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • PHP 错误警告:参数 1 应该是引用

    我 熟悉 PHP 我的朋友的网站因错误而崩溃 Warning Parameter 1 to Some function name expected to be a reference value given in public html i
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • 如何在 Carbon Laravel 中添加日期和另一个日期?

    在我的 laravel 项目中 我想将日期时间增加到前一个日期时间 这是我的代码 expire order 0 gt expire date new Carbon now gt addMonths 6 这两行的结果是 2018 01 28
  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records

随机推荐

  • AWS lambda java响应不支持嵌套对象?

    我是 Java 新手 所以这可能与 AWS lambda 根本无关 然而 lambda 对输入 输出对象采取了如此自由的态度 我认为它是罪魁祸首 我正在构建我的第一个 lambda 函数 并希望返回一个简单的 JSON 结构 在此示例中进一
  • Python 3 和 b'\x92'.decode('latin1')

    我使用 latin1 编解码器解码 b x92 得到了意想不到的结果 请参阅下面的会议 Python 3 5 2 v3 5 2 4def2a2901a5 Jun 25 2016 22 01 18 MSC v 1900 32 bit Inte
  • 将 ZipEntry 复制到新 ZipFile 的惯用方法是什么?

    我正在编写一个工具来在 DOCX 文件 一种压缩格式 中进行一些小的文本替换 我的方法是复制ZipEntry使用以下命令将原始文件中条目的内容写入修改后的文件中ZipOutputStream 对于大多数 DOCX 文件来说 这很有效 但偶尔
  • 如何使用 Mongoose 和 Node 连接到特定数据库?

    我正在学习如何使用 Mongoose 但有一些我不明白的地方 如何连接到集群中的特定数据库和集合 我有 5 个不同的数据库 每个数据库都有几个不同的集合 当我使用纯 Mongo 客户端时 正如官方文档中显示的那样 我像这样连接 const
  • 检测“变换:translate3d”支持

    有谁知道我会如何检测transform translate3d x y z 有支持吗 我的问题是我想使用translate3d跨支持它的浏览器 因为它倾向于使用硬件加速 因此动画更平滑 然后回退到translate哪里不是 查看这个解决方案
  • VB6:扩展组合框中的项目数量

    有没有办法在 VB6 组合固有控件下拉时扩展其中出现的项目数量 我有大约 10 件物品 我想把它们全部展示出来 Karl Peterson 的经典 VB 网站上的这段代码将自动调整组合框的大小以匹配元素的数量 http vb mvps or
  • 我如何在没有看到合并的情况下进行责备

    如果我有一个历史记录如下的文件 A B C D E 我对 E 进行了责备 然后我想看看修订版 B 和 C 中发生了什么变化 但我并不真正关心 D 因为那是合并 我有办法做到这一点吗 我想我正在寻找某种 no merges 选项来 gitbl
  • 如何从 YouTube 频道 ID 获取用户的 Google+ ID

    我正在运行一项服务 人们可以使用 oauth 2 0 连接他们的 Google 帐户 并且通过 YouTube 权限 我可以管理他们的频道 访问他们的 YouTube 频道 ID 然而 我的问题是你是否可以倒退 即如何根据给定的 YouTu
  • 添加设备,在 genymotion 中出现 http 403 错误

    我有下载Genymotion 2 7 2 最新 形成侧面并安装在我的笔记本电脑中 我已经登录 添加任何设备时 它会给出以下错误 无法创建虚拟设备 服务器返回 HTTP 状态代码 403 None
  • 如何检测 Rails 3 路由中的整数?

    我想做一个littleroutes rb 中的一些额外逻辑可能不属于那里 但对我来说似乎最有意义 我有两条相互冲突的路线 说得原始一些 match videos browseby gt videos browse as gt browse
  • 如何在 Tomcat 中通过 JNDI 配置 JSF 2.0 应用程序的项目阶段

    一直在努力寻找一种配置 Tomcat 7 0 11 的方法 以便我的 Web 应用程序可以使用 Tomcat 配置中的项目阶段设置 到目前为止 没有运气 这个想法是在 Tomcat 服务器 主机 应用程序范围内设置此属性 但不在 web x
  • 周视图标题的全日历格式

    这些天我正在使用全日历 我想更改周视图中日期的格式 我发现很多人都成功使用了columnFormat month ddd week ddd d M day dddd d M 但这对我不起作用 也许原因是我使用西班牙语作为语言 这是我的日历代
  • 在 C# 中使用 twain 获取图像作为图像类

    我可以连接并从我的设备获取图像吐温网 http www codeproject com KB dotnet twaindotnet aspx 但我想将图像处理为Image班级 当我尝试这样的事情时 ArrayList pics tw Tra
  • Java:用于匹配引号之间的单词的正则表达式

    我有以下测试字符串 This is my te st case with lines for tes t ing with regex But as he said It could be an arbitrary number of wo
  • 让 SSL 与 OSX 上的 Apache/Passenger 一起使用

    我在我的开发机器上使用 apache passenger 但需要添加 SSL 支持 不通过控制面板公开的东西 我之前在生产中已经这样做过 但由于某种原因 我似乎无法在 OSX 上运行它 到目前为止我所遵循的步骤来自默认的 apache os
  • 转换 data.table 中的*一些*列类

    我想将 data table 列的子集转换为新类 这里有一个热门问题 转换 data table 中的列类 https stackoverflow com questions 7813578 convert column classes i
  • 如何将 asyncio 与其他操作系统线程同步?

    我有一个带有一个主线程的程序 我在其中生成第二个使用 asyncio 的线程 是否提供任何工具来同步这两个线程 如果一切都是异步的 我可以使用它的同步原语来完成 例如 import asyncio async def taskA lst e
  • VB.NET - 将 WinForm 应用程序导出/转换为 Web ASP.NET 应用程序的最简单方法

    背景 我有一个用 VB NET 编写的 winform 应用程序 它使用 WebService 根据用户选择进行不同采访的营销公司向用户发送不同的邀请 winform 应用程序从各种文本框 列表框和下拉列表中提取字符串值 以创建一些 XML
  • 在 Rails 应用程序中连接到 Google Analytics API [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个很好的教程 如何在 Rails 应用程序中与 Google Analytics API 交互
  • 将任何base64文件转换为文件并移动到php / Symfony 4中的目标路径

    预先感谢我正在创建 APIsymfony 4只是上传base64 image或通过任何文件POSTMAN我必须将文件移动到目标目录 我在控制器中编写了以下代码 通过控制器我试图将文件移动到目录 但是 我收到的错误如下 未捕获的警告 file