私がしようとしている画像の外部リンクがあります:
これまでのところ:
_$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)
は画像の所有者を現在のユーザーに設定しますか?
@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");
setFilename
は、ファイルエンティティのフィールド値を更新するだけで、ディスク上の何も移動しません。 file_move()
を使用すると、両方を一度に実行できます。
$dest = "public://profile-pictures/$full_name.jpg";
if (file_move($picture, $dest) === FALSE) {
// Something went wrong.
}