2012-07-31 19 views
14

Cóż, atrybut plików pliku input[type=file] jest tylko do odczytu. Dlatego nie mogę zapisać moich danych typu blob w tym elemencie wejściowym.Chrome: Utwórz plik wejściowy z obiektu blob za pomocą JavaScript?

Ale jeśli utworzę nowy element pliku wejściowego za pomocą Javscript, to czy możliwe będzie wstawianie danych blob podczas tworzenia? Interesują mnie tylko rozwiązania działające pod chrome (extension) - inne przeglądarki nie mają znaczenia.

+3

ja niedawno próbowałem, a to nie jest możliwe. Jedynym przypadkiem, w którym chcesz zmodyfikować plik w '', jest sytuacja, w której chcesz zmienić plik przed przesłaniem. Jeśli szukasz metody, aby to osiągnąć, użyj funkcji 'FormData' ze specyfikacji XMLHttpRequest na poziomie 2. Przykłady kodu można znaleźć pod adresem http://stackoverflow.com/a/11628694 (prawdopodobnie duplikat pytania?) I http://stackoverflow.com/a/11382138 –

+0

@RobW Ustawienie wartości pliku wejściowego to również wygodny sposób aby wskazać użytkownikowi, że jego przesłanie jest poprawne/nieważne, szczególnie gdy mają możliwość wybrania pliku z dysku lub utworzenia pliku w przeglądarce (np. poprzez 'getUserMedia'). To jest mój przypadek użycia - wypełnianie pola wprowadzania pliku z mikrofonu, gdy przeglądarka nie obsługuje tego domyślnie (co robi kilka przeglądarek). – Brilliand

Odpowiedz

1

new File() Konstruktor dostępny jest w wersji chrom/chrom 38+. Zobacz File Constructor Sample, File API.

var date = new Date(), 
 
    filename = "file-" + date.getTime() + ".html"; 
 

 
var generatedFile = new File(
 
    ["<!DOCTYPE html><html><body>" + filename + "</body></html>"] 
 
    , filename 
 
    , { 
 
    type: "text/html", 
 
    lastModified: date 
 
    } 
 
); 
 

 
var objUrl = URL.createObjectURL(generatedFile); 
 

 
console.log(generatedFile, objUrl); 
 

 
var reader = new FileReader(); 
 

 
reader.addEventListener("load", function(event) { 
 
    console.log(event.target.result) 
 
}); 
 

 
reader.readAsText(generatedFile);

Powiązane problemy