zoukankan      html  css  js  c++  java
  • 用asp.net实现将上传的图片变小存入数据库

    有上传图片的功能,我将图片数据存入数据库中,需要将图片变小后和原图片一块存入数据库中,这样先可显示很多小图,点击后再显示大图!在asp.net中是这么做的:
    changimage.aspx中代码:
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="changimage.aspx.vb" Inherits="uploadimage.changimage"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title></title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    <FONT face="宋体"><INPUT id="File1" style="Z-INDEX: 101; LEFT: 291px; WIDTH: 180px; POSITION: absolute; TOP: 119px; HEIGHT: 45px" type="file" size="10" name="File1" runat="server"> <asp:Button id="cmdupload" style="Z-INDEX: 103; LEFT: 402px; POSITION: absolute; TOP: 194px" runat="server" Text="上传图片" Width="81px" Height="42px"></asp:Button>
    </FONT>
    </form>
    </body>
    </HTML>
    changimage.aspx.vb中代码如下:
    Public Class changimage
    Inherits System.Web.UI.Page
    Protected WithEvents cmddemo As System.Web.UI.WebControls.Button
    Protected WithEvents cmdupload As System.Web.UI.WebControls.Button
    Protected WithEvents SqlConn As System.Data.SqlClient.SqlConnection
    Protected WithEvents SqlComm As System.Data.SqlClient.SqlCommand
    Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile

    #Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    Me.SqlConn = New System.Data.SqlClient.SqlConnection()
    Me.SqlComm = New System.Data.SqlClient.SqlCommand()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
    Form Designer
    InitializeComponent()
    End Sub

    #End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Private Sub cmdupload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdupload.Click
    Dim image As System.Drawing.Image, newimage As System.Drawing.Image
    Dim callb As System.Drawing.Image.GetThumbnailImageAbort
    Dim f As System.IO.File, fs As System.IO.FileStream
    Dim temppath As String 
    Dim bigdata As Byte(), smalldata As Byte() '大图片数据、小图片数据
    Dim pic As System.Data.SqlClient.SqlParameter, picsmall As System.Data.SqlClient.SqlParameter
    '检察上传文件是否合标准,check函数是我根据网站需要写的了
    If check(File1.PostedFile.FileName) <> "ok" Then
    Response.Write(check(File1.PostedFile.FileName))
    Exit Sub
    End If
    '设置临时路径,为了防止多用户访问时的冲突,设了一个application对象
    If Application("image") = "" Then
    Application("image") = 0
    End If
    Application.Lock()
    temppath = Server.MapPath(CStr(Application("image"))) '临时路径
    Application("image") = Application("image") + 1
    Application.UnLock()
    '读取图片的数据
    ReDim bigdata((Me.File1.PostedFile.InputStream.Length)
    Me.File1.PostedFile.InputStream.Read(bigdata, 0, UBound(bigdata)) '将原图片数据读到bigdata中
    '改变图片的大小
    image = System.Drawing.Image.FromStream(Me.File1.PostedFile.InputStream)
    'newimage里面的size也可另外设置,我只用了80*60和60*80两种
    If image.Width > image.Height Then
    newimage = image.GetThumbnailImage(80, 60, callb, New System.IntPtr(0))
    Else
    newimage = image.GetThumbnailImage(60, 80, callb, New System.IntPtr(0))
    End If
    image.Dispose() 
    '将新图片及图片变小后存到临时路径中
    newimage.Save(temppath, System.Drawing.Imaging.ImageFormat.Jpeg)
    newimage.Dispose()
    '读取临时文件数据到smalldata中
    fs = New System.IO.FileStream(temppath, IO.FileMode.Open, IO.FileAccess.Read)
    ReDim smalldata(fs.Length)
    fs.Read(smalldata, 0, UBound(smalldata))
    fs.Close()
    '上述获得小图片的方法我原本想用system.io.memorystream的,可是行不通:代码如下:
    'dim m as system.io.memorystream
    'm=new system.io.memorystream()
    'newimage.save(m,System.Drawing.Imaging.ImageFormat.Jpeg)
    'redim smalldata(m.length)
    'm.read(smalldata,0,m.length)
    '可是上述方法读出来的smalldata全是空的,不知道原因,请指教
    '删除临时文件
    If f.Exists(temppath) Then
    f.Delete(temppath)
    End If
    '将数据加入数据库中
    '由于数据库中有image字段,我用sql插不进去,就用一个存储过程
    '请教各位大虾用sql语句插入有image字段的表该怎么写
    '用insert into talbe(pic,picsmall) values("&bigdata&","&smalldata&")这样不行,用'"&bigdata&"'也不行呀!
    SqlConn = New System.Data.SqlClient.SqlConnection(connstr) '可自己设置connstr连接数据库服务器
    SqlComm = New System.Data.SqlClient.SqlCommand()
    SqlComm.CommandType = CommandType.StoredProcedure
    SqlComm.CommandText = "dbo.image"
    pic = New System.Data.SqlClient.SqlParameter("@pic", SqlDbType.Image)
    pic.Value = bigdata
    picsmall = New System.Data.SqlClient.SqlParameter("@picsmall", SqlDbType.Image)
    picsmall.Value = smalldata
    SqlComm.Parameters.Add(pic)
    SqlComm.Parameters.Add(picsmall)
    SqlComm.Connection = SqlConn
    SqlComm.Connection.Open()
    SqlComm.ExecuteNonQuery()
    SqlComm.Connection.Close()
    SqlComm.Dispose()
    SqlConn.Dispose()
    End Sub
    End Class

    dbo.image存储过程如下:
    create proc dbo.image
    @pic image,
    @picsmall image
    as
    insert into table(pic,picsmall) values (@pic,@picsmall) 

    http://www.mikecat.net//trackback.asp?tbID=419
  • 相关阅读:
    nodejs--模块化
    node-package.json 文件package-lock.json
    NPM
    REPL介绍
    nvm npm nrm 区别
    docker docker-compose安装
    微信小程序对接阿里云视频点播,备忘
    python requests包爬网页数据demo
    php redis扩展地址
    php7.2.4安装rabbitmq扩展的过程中错误处理
  • 原文地址:https://www.cnblogs.com/runfeng/p/275491.html
Copyright © 2011-2022 走看看