#php #laravel
#php #laravel
Вопрос:
У меня есть код ниже, и вместо сохранения файлов он сохраняет временные файлы в location
Код
public function upload(Request $request)
{
//validate the file
if (!$request->hasFile('file_to_import')) {
return new JsonResponse([
'status' => 'fail',
'message' => trans('json.needSelectFile'),
]);
}
$file = $request->file('file_to_import');
if (strtolower($file->getClientOriginalExtension()) != 'csv') {
return new JsonResponse([
'status' => 'fail',
'message' => trans('json.needValidCSV'),
]);
}
$disk = Storage::disk('local');
if (!$disk->exists('feeds/translations')) {
$disk->makeDirectory('feeds/translations');
}
$uploaded_date = now();
$name_without_extension = str_replace('.' . $file->getClientOriginalExtension(), '', $file->getClientOriginalName());
$new_filename = $name_without_extension . ' - ' . $uploaded_date . '.' . $file->getClientOriginalExtension();
$location = storage_path('app/feeds/translations/', $new_filename);
$file->move($location);
return new JsonResponse([
'status' => 'success',
'filename' => $new_filename,
]);
}
file i uploaded
what saved in my app location
Что мне нужно
Это сохранение реального файла translator_translations - 2019-04-15 05:52:50.csv
, а не файла tmp.
есть идеи?
Комментарии:
1. используйте метод put, например Storage::disk(‘local’)->put($myfilename, $filedata);
2. Уверен
,
, что должно быть.
(полная остановка / точка) в$location = storage_path('app/feeds/translations/', $new_filename);
Ответ №1:
Вам нужно передать filename в move()
функцию вместо любого другого, иначе она примет временное имя.
$file->move($destinationPath,$filename);
Примечания :
Вы должны использовать правильное имя файла. Имя файла не должно содержать никаких специальных символов, таких как пробелы, запятая и двоеточие (:).
Комментарии:
1. в нем говорится:
Could not move the file "C:UsersTheoAppDataLocalTempphpBF29.tmp" to "C:laragonwww.....storageapp/feeds/translationsTranslation_Template - 15-04-2019 06_30_18 - 2019-04-15 06:29:37.csv" (move_uploaded_file(): Unable to move 'C:UsersTheoAppDataLocalTempphpBF29.tmp' to 'C:laragonwwwpursurystorageapp/feeds/translationsTranslation_Template - 15-04-2019 06_30_18 - 2019-04-15 06:29:37.csv')
2. @mafortis Не могли бы вы использовать правильное соглашение об именах файлов в соответствии с laravel?
Translation_Template - 15-04-2019 06_30_18 - 2019-04-15 06:29:37.csv
это неправильное имя файла. Так и должно бытьTranslation_Template_15-04-2019_06_30_18_2019-04-15_06_29_37.csv
. Вам нужно удалитьspaces
,-
,:
из имени файла, пожалуйста.3. Я изменил свою часть даты на
$uploaded_date = now()->format('Y-m-d_H_m_s');
и сейчас она загружается, быстрый вопрос? есть ли в любом случае я получаю свое имя файла, как я был? поскольку мне нужна эта конфигурация имени для другой функции, которая запускается после загрузки файла, если я не могу получить такие имена, мне снова придется менять множество кодов :/4. Вы можете добавить другое поле в базу данных, например
original_name
, в котором вы можете сохранить исходное имя файла. Затем вы можете использовать это имя для сравнения и получения файлов в соответствии с именем файла.5. @mafortis если вы удовлетворены ответом, и он решил вашу проблему в соответствии с вопросом, пожалуйста, откажитесь от голосования и примите его в качестве ответа, пожалуйста. Спасибо! 🙂
Ответ №2:
Вы неправильно подходите к использованию функции перемещения укажите два параметра старый каталог в новый каталог Вы удаляете эту строку $file->move($location);
и используете $file->storeAs(
$location, $new_filename
);
Комментарии:
1. В нем говорится:
Impossible to create the root directory "C:laragonwww....storage/appC:/laragon/www/.../storage/app/feeds/translations".
2. $file->storeAs( ‘app/feeds /translations/’, $new_filename ); Используйте это
3. теперь сяй:
fopen(C:laragonwww....storage/appapp/feeds/translations/translator_translations - 2019-04-15 06:32:09.csv): failed to open stream: No such file or directory
4. я знаю ваш каталог $file-> storeAs(storage_path(‘app / feeds / translations /’), $new_filename ); Используйте это, я надеюсь, работает нормально
5. попробуйте использовать этот storage_path(‘каналы / переводы /’, $new_filename);