如何使用symfony5通过URL发送上层文档

如何解决如何使用symfony5通过URL发送上层文档

我正在尝试通过symfony发送上传到3月签名的文档。我已经用纯PHP编写了代码,我想在symfony上修改它们,但我不知道该怎么做。这是用php编写的代码。

form.php

<?php
    $url = "http://ggrand:maarch@169.176.61.102:5600/rest/users";
    $response = file_get_contents($url);
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Envoi d'un document dans le parapheur</title>
    </head>

    <script type="text/javascript">
        var jsonObj =<?php echo $response;?>
    </script>

    <body>
        <form action="processJson_tableau.php" method="post" enctype="multipart/form-data">
            <table>
                <tr>
                    <td>Titre du document</td>
                    <td><input type="text" name="title" /></td>
                </tr>
                <tr>
                    <td>Référence du document</td>
                    <td><input type="text" name="reference" /></td>
                </tr>
                <tr>
                    <td>Description du document</td>
                    <td><input type="text" name="description" /></td>
                </tr>
                <tr>
                    <td>Type d'action</td>
                    <td>
                        <input type="radio" id="sign" name="mode" value="sign" />
                        <label for="male">Signature</label><br />
                        <input type="radio" id="note" name="mode" value="note" />
                        <label for="female">Anotation</label><br />
                        <input type="radio" id="visa" name="mode" value="visa" />
                        <label for="female">Visa</label><br />
                    </td>
                </tr>
                <tr>
                    <td>Joindre le fichier</td>
                    <td><input type="file" name="encodedDocument" /></td>
                </tr>
                <tr>
                    <td>Prénom et Nom de l'expéditeur</td>
                    <td><input type="text" name="sender" /></td>
                </tr>
                <tr>
                    <td>Nom et prénom du destinataire</td>
                    <td>
                        <select id="dropDown" name="processingUser"></select>
                        
                        <script type="text/javascript">
                            var myDDL = document.getElementById("dropDown");
                            var str1 = " ";

                            for (i = 0; i < jsonObj.users.length; i++) {
                                var option = document.createElement("option");
                                option.text = jsonObj.users[i].firstname.concat(str1,jsonObj.users[i].lastname);
                                option.value = jsonObj.users[i].login;
                                try {
                                    myDDL.options.add(option);
                                } catch (e) {
                                    alert(e);
                                }
                            }
                        </script>
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" name="submit" value="Start Upload"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

processJson_tableau.php

<?php

    $currentDirectory = getcwd();
    $uploadDirectory = "/";

    $errors = []; // Store errors here

    $fileExtensionsAllowed = ['jpeg','jpg','png','pdf']; // These will be the only file extensions allowed 

    $fileName = $_FILES['encodedDocument']['name'];
    $fileSize = $_FILES['encodedDocument']['size'];
    $fileTmpName  = $_FILES['encodedDocument']['tmp_name'];
    $fileType = $_FILES['encodedDocument']['type'];
    $fileExtension = strtolower(end(explode('.',$fileName)));

    $uploadPath = $currentDirectory . $uploadDirectory . basename($fileName); 

    if (isset($_POST['submit'])) {

      if (! in_array($fileExtension,$fileExtensionsAllowed)) {
        $errors[] = "This file extension is not allowed. Please upload a JPEG or PNG file";
      }

      if ($fileSize > 4000000) {
        $errors[] = "File exceeds maximum size (4MB)";
      }

      if (empty($errors)) {
        $didUpload = move_uploaded_file($fileTmpName,$uploadPath);

        if ($didUpload) {
          echo "The file " . basename($fileName) . " has been uploaded";
        } else {
          echo "An error occurred. Please contact the administrator.";
        }
      } else {
        foreach ($errors as $error) {
          echo $error . "These are the errors" . "\n";
        }
      }

    }

    $title = $_POST['title'];
    $reference = $_POST['reference'];
    $desc = $_POST['description'];
    $encodedDoc = $fileName;
    $sender = $_POST['sender'];
    $processingUser = $_POST['processingUser'];
    $mode = $_POST['mode'];

    $zip = new ZipArchive;
    if ($zip->open('doc1.zip',ZipArchive::CREATE) === TRUE)
    {
        // Add files to the zip file
        $zip->addFile($encodedDoc);
     
        // All files are added,so close the zip file.
        $zip->close();
    }

    // Get the file and convert into string 
    $zip_f = file_get_contents('doc1.zip'); 
      
    // Encode the zip file string data into base64 
    $data = base64_encode($zip_f); 
      
    // Display the output 
    //echo $data; 

    $puser = array('processingUser' =>$processingUser,'mode' => $mode);

    $document = array('title' =>$title,'reference' =>$reference,'description' =>$desc,'encodedDocument' =>$data,'sender' =>$sender,'workflow'=>array($puser)
        );

    $json_response = json_encode($document);

    //API Url
    $url = 'http://ggrand:maarch@169.176.61.102:5600/rest/documents';
     
    //Initiate cURL.
    $ch = curl_init($url);
     
    //Encode the array into JSON.
    $jsonDataEncoded = $json_response;
     
    //Tell cURL that we want to send a POST request.
    curl_setopt($ch,CURLOPT_POST,1);
     
    //Attach our encoded JSON string to the POST fields.
    curl_setopt($ch,CURLOPT_POSTFIELDS,$jsonDataEncoded);
     
    //Set the content type to application/json
    curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type: application/json')); 
     
    //Execute the request
    $result = curl_exec($ch);
    echo $result;
    unlink('doc1.zip');
    unlink($fileName);
?>

这是我开始在symfony上编写的控制器代码,但是现在我被卡住了,我不知道如何前进。

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Upload;
use App\Form\UploadType;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;

class FileController extends AbstractController
{
    /**
     * @Route("/home",name="accueil")
     */

   public function index(Request $request,EntityManagerInterface $manager)
    {
        $upload = new Upload();

        $form = $this->createForm(UploadType::class,$upload);

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()) {
            $manager->persist($upload);
            $manager->flush();

            //$enc = $upload->getDocument();
            //$file = base64_encode($enc);
            $file = $upload->getDocument();
            $fileName = md5(uniqid()).'.'.$file->guessExtension();
            $file->move($this->getParameter('upload_directory'),$fileName);
            $enc = base64_encode($file);
            $upload->setDocument($fileName);

            return $this->redirectToRoute('accueil');

        }

        return $this->render('file/index.html.twig',array(
            'form' => $form->createView(),));
    }
}

是否需要使用symfony在显示表单的地方显示该部分?

解决方法

要上传和下载文件,可以使用允许您执行以下操作的Vich uploader bundle

  • 自动命名文件并将其保存到配置的目录

  • 加载文件后,将文件重新注入实体或文档中。 数据存储作为Symfony \ Component \ HttpFoundation \ File \ File的实例
  • 从数据存储区中删除实体或文档后,从文件系统中删除文件
  • 模板化助手以生成文件的公共URL

完整的文档在这里:Vich uploader documentation

因此,要将此捆绑包添加到您自己的代码中,应添加一个实体,该实体将存储文件属性和文件本身的引用。该捆绑软件提供了一个对象,可帮助您将文件存储在所需的位置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-