web-dev-qa-db-ja.com

画像をファイルシステムにアップロードし、名前を変更して、現在のユーザーのプロフィール写真として設定します

私がしようとしている画像の外部リンクがあります:

  1. 画像をファイルシステムにアップロードします。
  2. 画像の名前を変更します。
  3. 画像の所有者を現在のユーザーに設定します。
  4. 現在のユーザーのプロフィール写真として画像を設定します。

これまでのところ:

_$full_name = "John Smith";
$picture_url = "https://scontent.fbey14-1.fna.fbcdn.net/v/t31.0-8/14054356_124897527960923_50194821455451882_o.jpg?_nc_cat=106&_nc_sid=09cbfe&_nc_ohc=P4i5oscJf0IAX_KFCfR&_nc_ht=scontent.fbey14-1.fna&oh=c13b6b2d8712db359f3be5e1ec835340&oe=5EF2B1A4";

// Download the picture to local filesystem.
$profile_pic = system_retrieve_file($picture_url, "public://profile-pictures", TRUE, FILE_EXISTS_REPLACE);

// Get the Profile Pic ID.
$profile_pic_id = $profile_pic->id();

// Load the image.
$picture = \Drupal\file\Entity\File::load($profile_pic_id);

// Rename the image.
$picture->setFilename("$full_name.jpg");
// Set the owner of the profile picture file.
$picture->setOwner($current_user);

// Save the image.
$picture->save();

$current_user->set('user_picture', $profile_pic_id);
$current_user->save();
_

画像は確かに_public://profile-pictures_でファイルシステムにアップロードされ、現在のユーザーのプロフィール写真としても正常に設定されます。

_/user/*/edit_編集ページの画像のファイル名はjohn-smith.jpgに設定されていますが、_public://profile-pictures_の画像のファイル名は14054356_124897527960923_50194821455451882_oです。 .jpgであると期待していますがjohn-smith.png

ファイルシステムでイメージの名前を変更するにはどうすればよいですか?

$picture->setOwner($current_user)は画像の所有者を現在のユーザーに設定しますか?

4

@Cliveに同意することで、その理由を実現できます。また、full_nameを使用してイメージを直接ダウンロードできます。
これを行うには、次の行を変更します。

$profile_pic = system_retrieve_file($picture_url, "public://profile-pictures", TRUE, FILE_EXISTS_REPLACE);

沿って

$profile_pic = system_retrieve_file($picture_url, "public://profile-pictures/$full_name.jpg", TRUE, FILE_EXISTS_REPLACE);

そして行を削除します:

$picture->setFilename("$full_name.jpg");
2
berramou

setFilenameは、ファイルエンティティのフィールド値を更新するだけで、ディスク上の何も移動しません。 file_move() を使用すると、両方を一度に実行できます。

$dest = "public://profile-pictures/$full_name.jpg";
if (file_move($picture, $dest) === FALSE) {
  // Something went wrong.
}
0
Clive