Upload now returns feedback as JSON