Подтвердить что ты не робот

js: входной файл в json с помощью JSON.stringify

Я хочу преобразовать входной файл html в строку json следующим образом:

var jsonString = JSON.stringify(file);
console.log( file );
console.log( jsonString );

Теперь, в моем firebug:

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

Почему jsonString пуст?

Фоновая информация: я хочу отправить ссылку на файл с помощью jsonp на другой php-сервер

Дополнительная информация: Я хочу преобразовать только файл-указатель (ссылку) в строку, чтобы отправить его через GET.

4b9b3361

Ответ 1

JSON.Stringify с файловым API (преобразовать объект File в строку) в браузере chrome, firefox и safari не работает (преобразовать объект File в {}) [я не знал причину этого]

Вы можете сделать работу, чтобы преобразовать объект File в строку, используя JSON.Stringify

Пример:

// 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);

Другое решение: вы можете добавить toJSON() в свой объект File

EX:

   // 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);

Примечания: отправьте File Object на сервер, используя POST глагол

Ответ 2

Вы должны прочитать содержимое файла с помощью API FileReader. Объект File не содержит содержимого файла (это просто указатель на файл, который позволяет вам прочитать его позже).

Вы можете проверить эту статью HTML5Rocks, чтобы узнать больше об использовании этого API.

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 );

Ответ 3

В случае, если кто-либо еще ищет решение этого вопроса, см. Мой ответ на другой пост и рабочий пример JSFiddle.

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()" />

Ответ 4

var obj = {
  name: 'dashu3f'
};

var stringObj = JSON.stringify(obj);
console.log(typeof stringObj);
console.log(stringObj);

откройте этот файл папки и запустите узел json.js