2013-09-16 3 views
1

Я работаю над проектом, используя meteor и collectionfs.collectionfs generate загрузить url

Я загружаю файлы в collectionfs и устанавливаю файл-манипулятор на место. Я могу использовать {{cfsFileUrl "defaultFilehandler"}}

Handlebar Helper для отображения URL-адреса, где изображение сохраняется, но я не могу скачать изображения с этого URL-адреса.

Когда я копирую его в браузере:

localhost:3000/cfs/contacts/Nj3WzrBKhqd9Mc9NP_defaultHandler.png 

метеорные маршрутов меня на страницу метеора (как если бы я был прописан Localhost: 3000)

В конце концов, я хотел бы достичь две вещи:

первый

дисплей изображения с помощью тега HTML:

<img src=??? alt="your image" /> 

2nd Я хотел бы убедиться, что у пользователя есть возможность просмотра этого изображения.

Наличие «загрузочного-url» не является достаточной защитой для меня.

Для того, чтобы добраться до точки я пошел через обычный учебник от collectionFS:

клиент JS

ContactsFS = new CollectionFS('contacts', { autopublish: false }); 

Deps.autorun(function() { 
    Meteor.subscribe('myContactsFiles'); 
}); 

Template.queueControl.events({ 
    'change .fileUploader': function (e) { 
     var files = e.target.files; 
     for (var i = 0, f; f = files[i]; i++) { 
      ContactsFS.storeFile(f); 
     } 
    } 
}); 

сервер JS

ContactsFS = new CollectionFS('contacts', { autopublish: false }); 

ContactsFS.allow({ 
    insert: function(userId, file) { 
     console.log('user'+userId+"file"+JSON.stringify(file)); 
     console.log("WILL SAVE:"+userId && file.owner === userId); 
     return userId && file.owner === userId; 
    }, 
    update: function(userId, files, fields, modifier) { 
     return _.all(files, function (file) { 
      return (userId == file.owner); 
     }); //EO iterate through files 
    }, 
    remove: function(userId, files) { return false; } 
}); 

Meteor.publish('myContactsFiles', function() { 
    if (this.userId) { 
     return ContactsFS.find({ owner: this.userId }, { limit: 30 }); 
    } 
}); 


ContactsFS.fileHandlers({ 
    default1: function(options) { // Options contains blob and fileRecord — same is expected in return if should be saved on filesytem, can be modified 
    return { blob: options.blob, fileRecord: options.fileRecord }; // if no blob then save result in fileHandle (added createdAt) 
    }}); 
+0

Привет, у меня возникла проблема, когда я попытался отобразить изображение. Он показал сломанный значок изображения с этой ошибкой: «Ресурс интерпретируется как изображение, но передается с текстом типа MIME/html:». Вы столкнулись с такой же проблемой? – Junhao

ответ

2

Ответ 1:

You могут использовать обновленную версию коллекции files3.3.3+ для публичного доступа к этим файлам, или просмотреть их.

<img src="{{cfsFileUrl 'default1'}}"> 

где default1 это имя функции обработчика вы определили в ContactsFS.fileHandlers

Ответ 2:

Существует не безопасное решение не строить в collectionFS как сейчас, его в создании Тхо.

+0

Следуя вашему предложению, отображается значок изображения, но он сломан с этой ошибкой: «Ресурс интерпретируется как изображение, но передается с типом MIME text/html:». Любая идея, как мне следует это исправлять? – Junhao

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