2014-06-10 14 views
16

örneğin ile JSONjs: my kundakçı içinde,</p> <pre><code>var jsonString = JSON.stringify(file); console.log(file); console.log(jsonString); </code></pre> <p>Şimdi:: girdi dosyası böyle bir json dizeye html girdi dosyasını dönüştürmek istediğiniz JSON.stringify

File { size=360195, type="image/jpeg", name="xyz.jpg", mehr...} 
Object {} 

jsonString neden boş?

Arkaplan bilgisi: Başka bir php sunucusuna

için ek bilgiler JSONP ile dosya referansı göndermek istiyorum: Ben, bir dizeye sadece dosya işaretçisi (referans) dönüştürmek için GET ile göndermek istiyorum.

+0

bu soruna yönelik herhangi bir çözümün,? şimdiden teşekkürler –

cevap

0

Dosya içeriğini FileReader API kullanarak okumak zorundasınız. Dosya nesnesi dosya içeriğini içermez (bu dosyaya daha sonra okumayı sağlayan dosyaya işaret eder).

Bu API'nin kullanımı hakkında daha fazla bilgi için bu HTML5Rocks article numaralı telefonu kullanabilirsiniz. File APIchrome yılında, firefox ve safari tarayıcıda çalışır ({} için File Nesne dönüştürmek) gelmez (File dizeye nesneyi dönüştürün) Şunları yapabilirsiniz

[Bunun nedenini bilmiyordum] ile

var file = getAFile(); 

var success = function (content) { 
    console.log(JSON.stringify(content)); } 

var fileReader = new FileReader(); 
fileReader.onload = function (evt) { success(evt.target.result) }; 
fileReader.readAsText(file); 
+0

Cevabınız için teşekkür ederiz. İşaretçiyi başka bir sunucuya göndermek istiyorum. Bu yüzden dosya tanıtıcısını bir dizgeye dönüştürmem gerekiyor. Bir fikrin var mı? – peacemaker

+0

Makaleyi okudun mu? 'evt.target.result' dosya içeriğini içeren bir dizedir. Güvenlik nedenleriyle, FileReader API'sini kullanmak onu almanın tek yoludur. –

+0

Sanırım bu benim projemdeki çözüm değil. Bir sorun var çünkü dizeyi GET ile göndereceğim. Dosya örneğin 500 MB ise dizenin boyutu çok uzun. – peacemaker

5

JSON.Stringify etrafında bir işin kullanılmasına dizeye File nesneyi dönüştürmek için yapmak JSON.Stringify

Ör:

// get File Object 
var fileObject = getFile(); 

// reCreate new Object and set File Data into it 
var newObject = { 
    'lastModified'  : fileObject.lastModified, 
    'lastModifiedDate' : fileObject.lastModifiedDate, 
    'name'    : fileObject.name, 
    'size'    : fileObject.size, 
    'type'    : fileObject.type 
}; 

// then use JSON.stringify on new object 
JSON.stringify(newObject); 

Başka Çözüm: size File nesneye

EX toJSON() behavior ekleyebilirsiniz:

// get File Object 
    var fileObject = getFile(); 

    // implement toJSON() behavior 
    fileObject.toJSON = function() { return { 
     'lastModified'  : myFile.lastModified, 
     'lastModifiedDate' : myFile.lastModifiedDate, 
     'name'    : myFile.name, 
     'size'    : myFile.size, 
     'type'    : myFile.type 
    };} 

    // then use JSON.stringify on File object 
    JSON.stringify(fileObject); 

Notlar: durumunda POST fiil

+0

Aslında, Chrome'da bir "Dosya" nesnesini de dizilemezsiniz. – ffxsam

+0

evet, Şimdi kromda 'File' Object ile' JSON.stringify' test ettim ve çalışmıyor. Ama ben bu soruya cevap verdiğimde test ettim –

+0

Uh ... ne? Dosya API'sı bir String'e dönüştürülebilir değildir. Bakınız: http://stackoverflow.com/questions/19119040/how-do-i-save-and-restore-a-file-object-in-local-storage – williamle8300

2

kullanarak sunucuya File Nesne göndermek kimse hala bir çözüm arıyor Bu, farklı bir gönderiye my answer ve JSFiddle üzerinde working example'a bakın.

JS:

function getFiles(){ 
    var files = document.getElementById("myFiles").files; 
    var myArray = []; 
    var file = {}; 

    console.log(files); // see the FileList 

    // manually create a new file obj for each File in the FileList 
    for(var i = 0; i < files.length; i++){ 

     file = { 
      'lastMod' : files[i].lastModified, 
      'lastModDate': files[i].lastModifiedDate, 
      'name'  : files[i].name, 
      'size'  : files[i].size, 
      'type'  : files[i].type, 
     } 

     //add the file obj to your array 
     myArray.push(file) 
    } 

    //stringify array 
    console.log(JSON.stringify(myArray)); 
} 

HTML:

<input id="myFiles" type="file" multiple onchange="getFiles()" /> 
İlgili konular