diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php
index 477d8a730..691a24d13 100644
--- a/app/Http/Controllers/MediaController.php
+++ b/app/Http/Controllers/MediaController.php
@@ -2,7 +2,57 @@
 
 namespace App\Http\Controllers;
 
+use Illuminate\Http\Request;
+use Auth, Storage, URL;
+use App\Media;
+use Image as Intervention;
+use App\Jobs\ImageOptimizePipeline\ImageOptimize;
+
 class MediaController extends Controller
 {
-    //
+	public function __construct()
+	{
+		$this->middleware('auth');
+	}
+
+	public function index(Request $request)
+	{
+		//return view('settings.drive.index');
+	}
+
+	public function composeUpdate(Request $request, $id)
+	{
+		ini_set('memory_limit', '1024M');
+		$this->validate($request, [
+			'file'      => function() {
+				return [
+					'required',
+					'mimes:' . config('pixelfed.media_types'),
+					'max:' . config('pixelfed.max_photo_size'),
+				];
+			},
+		]);
+
+		$user = Auth::user();
+
+		$photo = $request->file('file');
+
+		$media = Media::whereUserId($user->id)
+			->whereProfileId($user->profile_id)
+			->whereNull('status_id')
+			->findOrFail($id);
+
+		$fragments = explode('/', $media->media_path);
+		$name = last($fragments);
+		array_pop($fragments);
+		$dir = implode('/', $fragments);
+		$path = $photo->storeAs($dir, $name);
+        $res = [];
+        $res['url'] =  URL::temporarySignedRoute(
+            'temp-media', now()->addHours(1), ['profileId' => $media->profile_id, 'mediaId' => $media->id]
+        );
+        ImageOptimize::dispatch($media);
+		return $res;
+
+	}	
 }