8

フォームなしでVichUploaderBundleを使用してファイルをアップロードするにはどうすればよいですか?

いくつかのディレクトリにファイルがあります(たとえばweb/media/tmp/temp_file.jpg

私がこれを試してみると:

$file = new UploadedFile($path, $filename);

$image = new Image();
$image->setImageFile($file);

$em->persist($image);
$em->flush();

私はこのエラーを持っています:

不明なエラーのため、ファイル「temp_file.jpg」はアップロードされませんでした。

リモート URL からファイルをアップロードする必要があります。そのため、ファイルをtmpdirecotry (curl を使用) にアップロードしてから、VichUploadBundle に挿入しようとし続けます (上記を参照)。

4

4 に答える 4

11

受け入れられた答えは正しくありません(もう?)。使用法ドキュメントによると、FileSymfony のフォーム コンポーネントを使用せず に、実際に手動でアップロードできます。

/**
 * If manually uploading a file (i.e. not using Symfony Form) ensure an instance
 * of 'UploadedFile' is injected into this setter to trigger the  update. If this
 * bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
 * must be able to accept an instance of 'File' as the bundle will inject one here
 * during Doctrine hydration.
 *
 * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
 */
public function setImageFile(File $image = null)
{
    $this->imageFile = $image;

    if ($image) {
        // It is required that at least one field changes if you are using doctrine
        // otherwise the event listeners won't be called and the file is lost
        $this->updatedAt = new \DateTime('now');
    }
}
于 2015-11-29T12:43:43.633 に答える
4

Symfony\Component\HttpFoundation\File\UploadedFileの代わりに使用する必要がありますFile

$file = new UploadedFile($filename, $filename, null, filesize($filename), false, true);

VichUploaderBundleこのオブジェクトを処理します。

于 2016-08-12T13:40:16.880 に答える
1

簡単な回答: VichUploaderBundleSymfony フォーム コンポーネントを使用せずにファイルをアップロードすることはサポートされていません。

リモート URL からファイルをアップロードする必要があります。そのため、(curl を使用して) tmp ディレクトリにファイルをアップロードし、VichUploadBundle に挿入しようとし続けます (上記を参照)。

その場合、アップロードする必要はありません。ダウンロードする必要があります。そして、それVichUploaderBundleは意図したことではありません。

于 2015-08-05T11:47:33.777 に答える