Я отправляю данные формы из Angular 2 в Laravel API, чтобы сохранить записанный голос из RecordRTC js. Проверил имя файла, тип файла и файл большого двоичного объекта на консоли. это показывает. но не может получить в бэкэнд-коде Laravel.
public uploadToServer() {
let blob = this.recordRTC instanceof Blob ? this.recordRTC : this.recordRTC.blob;
let fileType = blob.type.split('/')[0] || 'audio';
let fileName = (Math.random() * 1000).toString().replace('.', '');
if (fileType === 'audio') {
fileName += '.' + (!!navigator.mozGetUserMedia ? 'ogg' : 'wav');
} else {
fileName += '.webm';
}
// create FormData
var formData: FormData = new FormData();
console.info(fileName);
console.info(blob);
console.info(fileType);
formData.append(fileType + '-filename', fileName);
formData.append(fileType + '-blob', blob);
console.info(formData);
this.recordingService.saveRecording(formData).subscribe(
data => this.saveRecordingSuccess(data),
error => this.saveRecordingFail(error)
);
}
Код Laravel: -
public function saveRecording(Request $request)
{
$fileName = '';
$tempName = '';
$file_idx = '';
if (!empty($_FILES['audio-blob'])) {
$file_idx = 'audio-blob';
$fileName = $_POST['audio-filename'];
$tempName = $_FILES[$file_idx]['tmp_name'];
}
if (empty($fileName) || empty($tempName)) {
if (empty($tempName)) {
echo 'Invalid temp_name: '.$tempName;
return;
}
echo 'Invalid file name: '.$fileName;
return;
}
$filePath = public_path('voiceRecording/' . $fileName);
// make sure that one can upload only allowed audio/video files
$allowed = array(
'webm',
'wav'
);
$extension = pathinfo($filePath, PATHINFO_EXTENSION);
if (!$extension || empty($extension) || !in_array($extension, $allowed)) {
echo 'Invalid file extension: '.$extension;
return;
}
if (!move_uploaded_file($tempName, $filePath)) {
// error code
return;
}
}
В коде laravel я не получаю никаких файлов и данных для публикации.
Отредактировал мой вопрос, пожалуйста, проверьте его один раз.
Вы не используете $_FILES в Laravel. Вы должны использовать $request->file('audio-blob'). Как предлагает @thefallen, вам следует прочитать о загрузке файлов с помощью Laravel. Что вы получите, если сделаете dd($request->files()) в своей функции saveRecording?
Он отображается пустым.
Исправлена проблема. var reader = new FileReader (); var data = {}; reader.readAsDataURL (this.recordRTC.getBlob ()); reader.onload = function () {данные = {значение: reader.result.split (',') [1], имя файла: имя файла, тип файла: тип файла}; console.info (reader.result.split (',') [1]); };






Вы должны поместить в свою форму mime-тип, как в JQuery Ajax, иметь свойство
mimeType: "multipart/form-data"
это не помогает, formdata из браузера не помогает
Shreyan, если у вас та же проблема, что и у Маниша, он нашел решение и добавил в свои комментарии, может быть, это поможет вам.
его проблема была впереди, я возвращаюсь пустой на контроллере laravel
Причиной пустого ответа может быть любая проверка, промежуточное ПО или что-то еще, до этого попробуйте отладить поток данных от вашего сообщения к бэкэнду. Делайте простой пост только с текстом и увеличивайте данные.
Хотя это тоже не помогло, но мне удалось получить данные формы на api, за которые я боролся в течение недели, скоро отправлю ответ
Возможно, вы захотите проверить какой-нибудь документ, это неправильный способ отправить файл с помощью
FormData.