如何解决如何使用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 举报,一经查实,本站将立刻删除。