Jag behöver koden (VB) + SQL-frågan för att kunna ladda upp filer och bilder till SQL. Hej, det är inte så vanligt att någon skriver ett helt program för att lösa liknadne problem och postar, men däremot hjälper vi gärna till att försöka rätta till eventuella fel eller peka i rätt riktning.Ladda upp filer till SQL
Jag behöver även kod för att ta fram mindre storlek på bild än originalet
/PerSv: Ladda upp filer till SQL
Det du behöver arbeta med när det handlar om att ladda upp filer i sql-servern var tidigare något som hette adox- men jag gissar att du nu i stället skall arbeta med BLOB's dvs big large objects. Så första momentet är att skapa en kolumn i din tabell med det formatet. Nästa moment är att bygga e uppladdningsrutin och i asp.net finns en färdig kontroll för detta om det är en webbsida. Den kontrollen kan även fånga filstorleken. När det gäller att ändra formatet så heter detta resample där man antingen anger x eller y axeln för att få till rätt storlek. Även där finner du säkert färdigt paketerad information för detta. Det bygger på 2 moment, ladda upp bilden till servern, skapa en ny bild med nytt format och slutligen radera den gamla.
Pellesoft har ett CM-system med den funktionen och min kod (bara som exempel) ser ut som följer och du troligen inte kommer kunna köra då det bara är ett urklipp (men kanske ger en hint om hur man kan göra) :
Private Sub btnAddImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddImage.Click
Dim ImageFolder As String = ""
Dim myPath As String
Dim UploadImage As HttpPostedFile = Request.Files.Get(0)
Dim id As String = Request.QueryString("id")
Dim filename As String
Dim filesize As Integer
Dim contenttype As String
filesize = System.Web.HttpContext.Current.Request.Files(0).ContentLength
contenttype = System.Web.HttpContext.Current.Request.Files(0).ContentType
Dim filestoupload As String = System.Configuration.ConfigurationManager.AppSettings("filestoupload")
Dim filestoresample As String = System.Configuration.ConfigurationManager.AppSettings("filestoresample")
Dim filesuffix As String = System.Configuration.ConfigurationManager.AppSettings("filesuffix")
' tar ut filnamn utan sökväg
filename = System.IO.Path.GetFileName(UploadImage.FileName)
' Är det rätt filtyper vi tillåter?
If InStr(filestoupload, contenttype, CompareMethod.Binary) > 0 Then
' Hämta relativ sökväg till vår katalog och gör om till absolut sökväg
myPath = pellesoft.Site.GetImageUploadPath & "\" & pellesoft.User.CurrentUserId ' Server.MapPath("/")
If lstFolder.SelectedValue <> "standard" Then
myPath += "\" + lstFolder.SelectedValue
End If
'Try
' sparar bilden
UploadImage.SaveAs(myPath & ImageFolder & "\" & filename)
Else
' inte godkänt filformat
' MyError.Text = "Detta är inte ett godkänt filformat på fil(er).<br>"
'lblFileInsert.Text = "Bild att infoga (Ej godkänd bildtyp)"
ClientScript.RegisterStartupScript(Me.GetType(), "alert", "<script language=""javascript"">alert('Denna filtyp är inte godkänd att ladda upp. Du kan endast ladda upp filer av typerna " & filesuffix & ".');</script>")
Exit Sub
'Response.Write("Inte godkänt filformat")
End If
' bekräftelse att filen är uppladdad
ClientScript.RegisterStartupScript(Me.GetType(), "alert", "<script language=""javascript"">alert('Filen är nu uppladdad.');</script>")
' // resample
Dim _Width As Integer = CType(GetFormField("txtnewwidth"), Integer)
Dim _Height As Integer = CType(GetFormField("txtnewheight"), Integer)
' vill vi köra resample?
If _Width > 0 Or _Height > 0 Then
If InStr(filestoresample, contenttype, CompareMethod.Binary) > 0 Then
' om bilden är av typen gif och är transparent så klarar inte rutinen av att göra
' thumbnail och smäller. Finns det någon kontroll för bildens egenskaper om hur
' den är skapad tro?
' gör även en thumbnail av den
'Dim thumbNailImage As System.Drawing.Image
'thumbNailImage = System.Drawing.Image.FromFile(ImageFolder & "\" & filename)
' *** ny variant - denna låser inte filen som FromFile gör
'http://oldlook.experts-exchange.com:8080/Programming/Programming_Languages/Dot_Net/Q_20712914.html
' om filen redan finns döper vi först om den - för vi kan inte spara den nya filen över den gamla
' utan att få ett GDI+ error
Dim tmpfilename As String = pellesoft.Site.GetImageUploadPath & "\" & pellesoft.User.CurrentUserId & "\" & Session.SessionID & Right(filename, 4)
Try
Rename(pellesoft.Site.GetImageUploadPath & "\" & pellesoft.User.CurrentUserId & "\" & filename, tmpfilename)
Catch er As Exception
' ignorera ev fel
End Try
' hämtar in bilden som en stream
Dim fstream As New System.IO.FileStream(tmpfilename, System.IO.FileMode.Open)
Dim FullSizeImage As System.Drawing.Image = Image.FromStream(fstream)
fstream.Close()
' hämtar storleken
Dim imageHeight As Integer = FullSizeImage.Height
Dim imageWidth As Integer = FullSizeImage.Width
If _Height = 0 Then _Height = imageHeight
If _Width = 0 Then _Width = imageWidth
' hämtar in vad kunden önskat
If imageWidth > _Width And _Width > 0 Then
_Height = CType(imageHeight * (_Width / imageWidth), Integer)
'_Width = txtwidth.Text
Else
_Width = imageWidth
End If
If imageHeight > _Height Then
_Width = CType(imageWidth * (_Height / imageHeight), Integer)
'_Height = txtheight.Text
Else
_Height = imageHeight
End If
' genererar vår nya bild (utan gdi++) vilket medför att vi inte får problem med att ändra storlekarna
' på bilder som är transparenta.
Dim loBMP As New Bitmap(tmpfilename)
Dim bmpOut As New Bitmap(_Width, _Height)
Dim g As Graphics = Graphics.FromImage(bmpOut)
g.FillRectangle(Brushes.White, 0, 0, _Width, _Height)
g.DrawImage(loBMP, 0, 0, _Width, _Height)
bmpOut.Save(pellesoft.Site.GetImageUploadPath & "\" & pellesoft.User.CurrentUserId & "\" & filename, System.Drawing.Imaging.ImageFormat.Jpeg)
loBMP.Dispose()
bmpOut.Dispose()
' -- använder gdi+
'Dim oImg As System.Drawing.Image = FullSizeImage
'Dim oThumbNail As System.Drawing.Image = New Bitmap(_Width, _Height, oImg.PixelFormat)
'Dim oGraphic As Graphics = Graphics.FromImage(oThumbNail)
'oGraphic.CompositingQuality = CompositingQuality.HighQuality
'oGraphic.SmoothingMode = SmoothingMode.HighQuality
'oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic
'Dim oRectangle As Rectangle = New Rectangle(0, 0, _Width, _Height)
'oGraphic.DrawImage(oImg, oRectangle)
'oThumbNail.Save(pellesoft.Site.GetImageUploadPath & "\" & pellesoft.User.CurrentUserId & "\" & filename, ImageFormat.Jpeg)
'oImg.Dispose()
' radera tempfilen
Try
Kill(tmpfilename)
Catch ex As Exception
End Try
Else
' inte godkänt filformat
End If
End If
Response.Redirect(Request.Url.ToString)
End Sub
Function GetImageSize(ByVal strfilename As String) As String
' får inte vara tomt
If strfilename = "" Then Return ""
If InStr(strfilename, "_vti") > 0 Then Return ""
If InStr(strfilename, ".swf") > 0 Then Return ""
If InStr(strfilename, ".fla") > 0 Then Return ""
If InStr(strfilename, ".flw") > 0 Then Return ""
If InStr(strfilename, ".pdf") > 0 Then Return ""
Dim filelength, shtWidth, shtHeight As Integer
Dim fs As FileStream = New FileStream(strfilename, FileMode.Open, FileAccess.Read, FileShare.Read)
If Not IsNothing(fs) Then
Try
Dim photo As Image = Image.FromStream(fs, True)
filelength = Convert.ToInt32(fs.Length)
shtWidth = photo.Width
shtHeight = photo.Height
photo = Nothing
Catch ex As Exception
'Throw New Exception(strfilename & " " & ex.Message)
shtWidth = 0
shtHeight = 0
End Try
End If
fs.Close()
fs = Nothing
Return "" & shtWidth.ToString & "*" & shtHeight.ToString
End Function
Private Sub btnNewFolder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewFolder.Click
'// skapa en ny mapp i förhållande till trädstrukturen
' lstNewFolder
Dim currUploadPath As String
If pellesoft.Site.IsLocalhost Then
currUploadPath = System.Configuration.ConfigurationManager.AppSettings("UploadImagePathLocal") & "\" & CStr(pellesoft.User.CurrentUserId) & "\"
Else
currUploadPath = System.Configuration.ConfigurationManager.AppSettings("UploadImagePath") & "\" & CStr(pellesoft.User.CurrentUserId) & "\"
End If
If lstNewFolder.SelectedIndex = 0 Then
' vi skall skapa en ny root-mapp
MkDir(currUploadPath & "\" & txtNewFolder.Text)
Else
' en undermapp
MkDir(currUploadPath & "\" & lstNewFolder.SelectedValue & "\" & txtNewFolder.Text)
End If
' Ladda om sidan så vi ser ändringarna
Response.Redirect(Request.Url.ToString)
End Sub