Hi - I upload Avatar images up to Cloudinary. Here is what the React component looks like for the “unsigned” - to minimize server interaction - upload. Then look at their website for how to do “signed” upload.
/* UploadAvatar.jsx */
import React from ‘react’ ;
import prebind from ‘meteor-react-prebind’ ;
import { Meteor } from ‘meteor/meteor’ ;
/* called by LoginList.jsx */
export default class UploadAvatar extends React.Component {
constructor( props ) {
super( props ) ;
prebind( this ) ;
}
cloudinary_opener( e ) {
if ( Meteor.user() ) {
cloudinary.openUploadWidget({
multiple: false ,
max_image_width: 600 ,
max_image_height: 400 ,
cloud_name: ‘ur_clowd_nam’ ,
upload_preset: ‘ur_uplowd_preset’ ,
resource_type: ‘image’ ,
client_allowed_formats: [ “bmp”, “gif”, “ico”, “jpeg”, “jpg”, “png”, “svg” ] ,
max_file_size: 2000000
} ,
function( error, result ) {
let secure_url = JSON.stringify( result ) ;
let delete_token = secure_url ;
secure_url = secure_url.substring( secure_url.indexOf( 'secure_url' ) ) ;
secure_url = secure_url.substring( secure_url.indexOf( 'https://') ) ;
secure_url = secure_url.substring( 0, secure_url.indexOf( '","') ) ;
delete_token = delete_token.substring( delete_token.indexOf( 'delete_token' ) ) ;
delete_token = delete_token.substring( delete_token.indexOf( '":"') + 3 ) ;
Session.set( 'delete_token',
delete_token.substring( 0, delete_token.indexOf( '","') ) ) ;
if ( error ) {
alert( '** ERROR ** Trying to Save Avatar Picture.' ) ;
} else {
Meteor.call( 'upsertAvatar', secure_url, function( err, res ) {
if ( err ) {
alert( "** ERROR trying to save avatar picture. ** " + err.message ) ;
} else {
// success message
}
}) ;
}
}
) ;
} else {
alert( "Sorry, you must be Logged-In to your account before you can upload an Avatar." ) ;
}
}
render() {
return (
<div className="loginlistav">
<a className="loginlisttext" ref="upload_widget_opener"
id="upload_widget_opener" onClick={ this.cloudinary_opener }>Upload Avatar</a>
</div>
) ;
}
} ;
Then in MeteorMethods, you have the function something like:
upsertAvatar: function( avatarurl ) { // upload avatar image
check( [ avatarurl ], [ String ] ) ;
let future = new Future() ;
if ( Meteor.user() ) {
Meteor.users.upsert({ username: Meteor.user().username },
{ $set: { "profile.image": avatarurl } }) ;
future.return( true ) ;
} else {
future.return( false ) ;
}
return future.wait() ;
},
– easy enough, ciao, jw