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 einGuid
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))
undimage.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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie diese Klasse verwenden, für den Sie eine Datei Hochladen zum server :
}
können Sie auch speichern Sie die Miniaturansicht Ihrer Fotos mit
ResizeImage
Methode und In der Steuerung werde ich speichern Sie die Datei Namen in der Datenbank auf diese Weise:auch für konvertieren hochgeladenen Bilder, die Sie verwenden können, dieser code innen
UploadFile
Methode :Ich fand diesen Beitrag sehr hilfreich und ich wollte mein Anteil an der Umsetzung von Sirwan Afifi ausgezeichnete Antwort. Ich brauchte die resize-Funktion zu nehmen und wieder ein Bild, so ist es ein wenig anders. Aber ich habe auch noch einen boolean zu bewahren, die das Seitenverhältnis eines Bildes, wenn Sie wollen.