2016-09-17 3 views
0

Я случайно использую реакцию, но факт остается фактом: когда я размещаю простую страницу со входом для загрузки локального файла, если я console.log фактический файл после его выбора, здесь что я получаю от консоли:Загрузка видеофайла без загрузки ввода

File {name: "myfile.mp4", lastModified: 1474084788000, lastModifiedDate: Fri Sep 16 2016 23:59:48 GMT-0400 (EDT), webkitRelativePath: "", size: 27828905…} 
lastModified: 1474084788000 
lastModifiedDate: Fri Sep 16 2016 23:59:48 GMT-0400 (EDT) 
name: "myfile.mp4" 
size: 27828905 
type: "video/mp4" 
webkitRelativePath: "" 
__proto__: File 

и поэтому файл загружает в video теги и я могу смотреть. (Код ниже ...)

Затем, если я хочу загрузить тот же файл, но с жесткого кода полного пути, например: "file:///path/to/myfile.mp4", появляется ошибка This video file format is not supported., и я вернусь с консоли. тот же самый путь, который я ранее жестко закодировал.

Вопрос: как загрузить локальный файл с помощью жестко заданного пути вместо выбора файла из входного элемента?
OR
Как создать объектURL непосредственно с локального пути?

Я уже пробовал файл Blob перед тем, как передать его функции URL.createObjectURL, но если я не сделал что-то не так, это не сработало.

Рендер код функции:

render() { 

    return (
     <div> 
     <input type="file" ref="input" onChange={this.upload} /> 

     <video ref="video" type="video/mp4" controls loop autoPlay width="720"></video> 
     <div ref="message"></div> 
     </div> 
    ); 
    } 

Функции:

processs = (file) => { 
     let fileURL = URL.createObjectURL(file); 
     this.refs.video.src = fileURL; 
    } 

    playFile = (event) => { 
    let file = event.target.files[0]; 
    console.log(file); 

    //check if video can be played 
    if(this.refs.video.canPlayType(file.type) != ""){ 
     this.processs(file); 
    } else { 
     this.refs.message.innerHTML = "This video file format is not supported." 
    } 

    }; 
+0

Что вы имеете в вид _ «загружать один и тот же файл, но из закодированного полного пути вместо» _ ? Установка '

+0

В ответ, вместо передачи файла как 'const file = event.target.files [0]' из входного элемента, я просто создал 'this.state ({myfile:" file: /// fullpath/to/myfile.mp4 "})' в конструкторе и ссылайтесь на него как 'const file = this.state.myfile' –

+0

Вы можете использовать' XMLHttpRequest() 'для запроса локального файла как' Blob' – guest271314

ответ

0

Как создать objectURL непосредственно из локального пути?

Вы можете использовать XMLHttpRequest с responseType набором для "blob". File наследует от Blob, вы можете передать возвращенный Blob в вашу существующую функцию, которая ожидает File объекта. Смотрите также Loading images from file with Javascript

var request = new XMLHttpRequest(); 
request.responseType = "blob"; 
request.open("GET", "file:///path/to/myfile.mp4"); 
request.onload =() => { 
    // do stuff with `request.response` : `Blob` 
} 
request.send(); 
+0

Запросы на перекрестный поиск поддерживаются только для протокольные схемы: http, data, chrome, chrome-extension, https, chrome-extension-resource. –

+0

@JeanmichelCote Какие браузеры вы пробовали 'javascript' at Answer? Вы читали связанные вопросы/ответ? – guest271314

+0

Извините, я не уверен, что вы имеете в виду ... –

Смежные вопросы