Erstellen Sie ein avatar-upload-Formular für Benutzer

Ich bin mit ASP.Net MVC 5 und ich will einen avatar erstellen für meine user-profile. Ich bin mir nicht sicher, ob das was ich mache so weit, das ist der richtige Weg, vor allem aus Gründen der Sicherheit, so wollte ich einige Ratschläge bekommen.

Was ich mache so weit

Im Blick:

@using (Html.BeginForm("ManageUser", "Account", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <input type="submit" value="Add Avatar" />
}

Controller:

    internal static bool SaveAvatar(User user, HttpPostedFileBase file)
    {
        if (file == null || file.ContentLength <= 0 || file.ContentLength > MAX_LENGTH)
            return false;

        //I think I should convert the file somehow instead of saving it
        var path = HostingEnvironment.MapPath("~/img/avatar/") + string.Format("{0}.png", user.UserName);
        file.SaveAs(path);
        user.HasAvatar = true;

        return true;
    }

Habe ich einige Bedenken:

  • In den obigen code, wie ich sagte, ich denke, statt nur sparen
    welcher Benutzer hat zu mir geschickt, ich sollte irgendwie eine Bibliothek zu konvertieren
    das Bild um eine PNG-Datei und speichern Sie es. Wenn dem so ist, ist es eine gute und einfache Bibliothek, dies zu tun?
  • Ich Frage mich, ob mit den Namen des Benutzers als eine Datei wäre eine gute Idee. Nachdem alle, die Sie wählen, dieser name, und es ist nicht etwas, das ich entscheiden.
  • Ist es eine gute Idee, benutzen Sie einfach Bilder oder sollte ich einen controller zu überprüfen-Anfragen oder Router die Anfragen auf eine versteckt Bild?

Wenn das, was ich Tue, ist VÖLLIG falsch, und Sie wissen, eine bessere Quelle zu lernen den richtigen Weg, bitte zeigen mich in die richtige Richtung. Danke.

  • Das einzige, was ich sehe, fehlt, ist, dass Sie sollten überprüfen der server-Seite, dass die Datei tatsächlich ein Bild ist (so tun client-Seite klingt nicht wie eine gute Idee). Finden Sie diese Antwort here. Neben dem speichern der avatar in einem einheitlichen format ist ein sound-Idee, und PNG ist ein gutes format für die, die Image Klasse weiß, wie das geht.
  • Naja, ich würde verwenden Sie Benutzer-Id (wenn du es hast), statt dessen Benutzername (Datei-Namenskonventionen != Benutzername Konventionen). Oder einfach nur speichern Sie den avatar in der db als Tabelle das Feld Benutzer. Sie können auch erzwingen, dass Benutzer das hochladen nur begrenzte Bild-Typen (nur im png-Format, oder das format " nur Sie wissen, wie zu konvertieren png)
  • Ich dachte über die Benutzer-Id, aber wenn man bedenkt User.Id ist ein Guid ich bin mir nicht sicher wie gut die Bild-URL Aussehen würde. Es wäre so etwas wie: site.com/img/avatar/be795f5e-ed6d-4970-aed8-7cc345ac9e9a.png
  • OK. Es bekam. Nur um sicher zu sein: using (var image = Image.FromStream(file.InputStream, true, true)) und image.Save(path, ImageFormat.Png); Recht?
  • so etwas wie, ja, hat nicht funktioniert mit den Bildern in eine lange Zeit, wird es geben Sie eine exception, wenn die Datei ist kein Bild, und wenn es ist, Sie können überprüfen für Größe, format etc..
  • OK. Danke. Ich bin auf die Umsetzung, was die post, die Sie erwähnt sagt.
  • oh btw, Lesen der Antwort habe ich verlinkt und Ihr problem mit der Datei name, machte mir Gedanken über die Größe des Bildes (im Gegensatz zu der Größe der Datei), müssen Sie zur Anzeige des avatar in mehreren Größen ? Wenn dem so ist, die Praxis neigen dazu, zu speichern, den avatar in verschiedenen Größen, dann laden Sie die richtige Größe für die Anzeige. Auch wenn Sie brauchen, einer einzigen Größe, ändern der Größe des Bilds vor dem speichern ist eine gute option (spart Platz und vermeidet dass die Größe der avatar-jeden-Zeit, die Sie brauchen, um es anzuzeigen)
  • Völlig einig.

Schreibe einen Kommentar