2012-02-12 20 views
6

Próbuję użyć , aby przesłać png do imgur. Użyłem kodu bezpośrednio z Imgur API example, ale myślę, że nie przekazuję poprawnie pliku png, ponieważ pojawia się komunikat o błędzie z informacją: file.type is undefined. Myślę, że plik jest ok, jak próbowałem to z kilkoma różnymi pngs. Mój kod wygląda następująco:Przesyłanie png do imguru za pomocą javascript

<html> 
<head> 
<script type="text/javascript"> 
function upload(file) { 
    // file is from a <input> tag or from Drag'n Drop 
    // Is the file an image? 
    if (!file || !file.type.match(/image.*/)) return; 

    // It is! 
    // Let's build a FormData object 
    var fd = new FormData(); 
    fd.append("image", file); // Append the file 
    fd.append("key", "mykey"); // Get your own key: http://api.imgur.com/ 

    // Create the XHR (Cross-Domain XHR FTW!!!) 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "http://api.imgur.com/2/upload.json"); // Boooom! 
    xhr.onload = function() { 
     // Big win! 
     // The URL of the image is: 
     JSON.parse(xhr.responseText).upload.links.imgur_page; 
    } 

    // Ok, I don't handle the errors. An exercice for the reader. 
    // And now, we send the formdata 
    xhr.send(fd); 
} 
</script> 
</head> 

<body> 

<button type="button" onclick="upload('test.png')">upload to imgur</button> 

</body> 
</html> 

Plik test.pngpng jest przechowywany w tym samym katalogu, co moim pliku html.

Odpowiedz

2

Użyty przykład oczekuje, że do wstawienia obrazu zostanie użyty element wejściowy (type = file). Wypróbuj this example. Możesz uzyskać dostęp do danych obrazu za pomocą Canvas like this.

Podsumowując, trzeba to zrobić:

  1. Tworzenie nowego obrazu z pliku (musi być w domenie lokalnej)
  2. Narysuj obraz na płótnie w onload
  3. Extract dane obrazowe wykorzystujące this method
  4. które przechodzą dane Imgur like here
+0

Dzięki za sugestie. Aby dodać obraz do płótna, czy obraz 'id'? Zakładam, że nie mogę się do niego odwołać, używając nazwy pliku, na podstawie komentarza @ skimberk1. – djq

+0

Nie można odwołać się do obrazu za pomocą nazwy pliku. Będziesz musiał załadować go do elementu img, a następnie załadować jego zawartość do płótna za pomocą drawImage. Ważne jest, aby tę ostatnią część wykonać w module obsługi ładowania img. W przeciwnym razie to nie zadziała. –

+0

Dzięki bebraw, która pomaga mi zrozumieć przepływ. Obecnie eksperymentuję z http://html2canvas.hertzen.com/; wygląda na to, że wykona część tych kroków. – djq

3

Plik musi być obiektem File utworzonym za pomocą pliku API HTML5, nie można po prostu nadać mu nazwy pliku i oczekiwać, że zadziała.

Javascript nie ma dostępu do systemu plików, może tylko uzyskiwać dostęp do plików, które są mu przekazywane za pomocą metody przeciągania i upuszczania lub wprowadzania danych.