Я работаю над приложением, использующим внешний интерфейс Angular 5 и внутренний сервер Rails 5.Оба API-интерфейса, которые взаимодействуют через JSON.Далее, для загрузки я использую драгоценный камень Shrine с Uppy.Для загрузки и запуска я следовал этим двум урокам: https://github.com/shrinerb/shrine-tus-demo, https://github.com/shrinerb/shrine/wiki/Adding-Resumable-Uploads
Проблема, с которой я сталкиваюсь, заключается в том, что для отправки данных на рельсы, атрибут загруженного имени из храмаи приложение рельсов должно соответствовать данным, которые будут переданы приложению рельсов.Итак, из обучающих программ это:
# models/movie.rb
class Movie < Sequel::Model
include VideoUploader::Attachment.new(:video)
end
должно соответствовать атрибуту имени из этого:
<div class="form-group">
<input type="hidden" name="movie[video]" value="<%= @movie.cached_video_data %>" class="upload-hidden">
<input type="file" name="movie[video]" class="upload-file">
</div>
Поскольку я не использую внешний интерфейс Rails, данные не так легко передаются,Есть ли способ примирить их?Я попытался передать следующее в Rails API в качестве значения атрибутов имени:
name="movie[video]"
name="video"
Я даже попытался отправить значения JSON, такие как:
name="{
"id":"http://endpoint.com/files/226eed1388bbd1b7f029897ad2b86f16",
"storage":"cache",
"metadata":{
"filename":"SampleVideo_720x480_1mb.mp4",
"size":1057149,
"mime_type":"video/mp4"
}
}"
Поскольку это соответствует тому же JSONотформатировать, когда я могу запустить movie.video в консоли rails.
Можно ли как-нибудь это сделать?
РЕДАКТИРОВАТЬ:
Хорошо, я задал не тот вопрос,Извините, это мой первый проект, который не следует учебнику.Я потратил много времени, пытаясь заставить эту работу:
name="{
"movie": {
"video": {
"id":"http://endpoint.com/files/226eed1388bbd1b7f029897ad2b86f16",
"storage":"cache",
"metadata":{
"filename":"SampleVideo_720x480_1mb.mp4",
"size":1057149,
"mime_type":"video/mp4"
}
}
}
}"
, прежде чем понял, что данные отправляются через tus-js-client и tus-server.Таким образом, правильный вопрос должен заключаться в том, как отправить правильный атрибут имени в клиент tus-js, чтобы его можно было отправить серверу tus и, наконец, передать в приложение Rails.Для получения дополнительной информации о бэкэнде, вот параметры создания и фильма:
def create
movie = Movie.new(movie_params)
if movie.save
render json: movie, status: 201
else
render json: { errors: movie.errors }, status: 422
end
end
private
def movie_params
# params.permit(:title, :year, :plot, :video_data)
params.require(:movie).permit(video: [metadata: [:title, :year, :plot]])
# params.require(:movie).permit!
end
Кроме того, для отправки этой информации я использую встроенную отправку Uppy.Это исключает Angular обычные методы представления и, следовательно, отправляется через tus-js-client (я думаю).Если информация что-то значит, я потратил довольно много времени, пытаясь всеми способами пытаться передать атрибут имени, чтобы он соответствовал атрибуту вложения.