FUNCTION JPEGSentinelsAreOK(CONST Filename: TFilename): BOOLEAN; VAR FileStream: TFileStream; w1 : WORD; // a "word" is always 2 bytes long w2 : WORD; BEGIN ASSERT(SizeOf(WORD) = 2); RESULT := FileExists(Filename); IF RESULT THEN BEGIN FileStream := TFileStream.Create(Filename, fmOpenRead OR fmShareDenyNone); TRY FileStream.Seek(0, soFromBeginning); // use seek or position FileStream.Read(w1,2); FileStream.Position := FileStream.Size - 2; FileStream.Read(w2,2) FINALLY FileStream.Free END; RESULT := (w1 = $D8FF) AND (w2 = $D9FF); END; END;procedure TForm2.Button3Click(Sender: TObject); VAR JPEGImage:TJPEGImage; fS : TMemoryStream; begin IF OpenpictureDialog1.Execute THEN BEGIN IF JPEGSentinelsAreOK(OpenpictureDialog1.Filename) THEN BEGIN JPEGImage := TJPEGImage.Create; TRY JPEGImage.LoadFromFile(OpenPictureDialog1.Filename); Image1.Picture.Graphic := JPEGImage; try fs:=TMemoryStream.Create; JPEGImage.SaveToStream(fs); Table1.Append; Table1.FieldByName('題目ID').AsInteger:=Table1.RecordCount+1; TBlobField(Table1.FieldByName('圖片')).LoadFromFile(OpenpictureDialog1.Filename); Table1.Post; finally fs.Free; end; FINALLY JPEGImage.Free END; END; END; end; procedure TForm2.DBGrid1DblClick(Sender: TObject); var bS : TBlobStream; Pic : TJpegImage; begin if DBGrid1.SelectedField = TDBGrid(Sender).DataSource.DataSet.FieldByName('圖片') then bS := TBlobStream.Create(TBlobField(Table1.FieldByName('圖片')), bmWrite); // AdoTable1Picture為欄位名稱。 try Pic:=TJpegImage.Create; try Pic.LoadFromStream(bS); Image1.Picture.Assign(Pic); finally Pic.Free; end; finally bS.Free end; end;end.
fclose(ifp); return l_stat.st_size; }/*把文件从内存写入硬盘,成功返回0,不成功返回-1*/ int WriteFile(const char *p_szFileName, const char *p_buff, const int p_iSize, int flag = 1) { int ret; FILE *fp;
ret = access(p_szFileName, F_OK); if (ret == 0 && flag != 1) { return -1; }
VAR
FileStream: TFileStream;
w1 : WORD; // a "word" is always 2 bytes long
w2 : WORD;
BEGIN
ASSERT(SizeOf(WORD) = 2);
RESULT := FileExists(Filename);
IF RESULT
THEN
BEGIN
FileStream := TFileStream.Create(Filename, fmOpenRead OR fmShareDenyNone);
TRY
FileStream.Seek(0, soFromBeginning); // use seek or position
FileStream.Read(w1,2); FileStream.Position := FileStream.Size - 2;
FileStream.Read(w2,2)
FINALLY
FileStream.Free
END;
RESULT := (w1 = $D8FF) AND (w2 = $D9FF);
END;
END;procedure TForm2.Button3Click(Sender: TObject);
VAR
JPEGImage:TJPEGImage;
fS : TMemoryStream;
begin
IF OpenpictureDialog1.Execute
THEN
BEGIN
IF JPEGSentinelsAreOK(OpenpictureDialog1.Filename)
THEN
BEGIN
JPEGImage := TJPEGImage.Create;
TRY
JPEGImage.LoadFromFile(OpenPictureDialog1.Filename);
Image1.Picture.Graphic := JPEGImage;
try
fs:=TMemoryStream.Create;
JPEGImage.SaveToStream(fs);
Table1.Append;
Table1.FieldByName('題目ID').AsInteger:=Table1.RecordCount+1;
TBlobField(Table1.FieldByName('圖片')).LoadFromFile(OpenpictureDialog1.Filename);
Table1.Post;
finally
fs.Free;
end;
FINALLY
JPEGImage.Free
END;
END; END;
end;
procedure TForm2.DBGrid1DblClick(Sender: TObject);
var
bS : TBlobStream;
Pic : TJpegImage;
begin
if DBGrid1.SelectedField = TDBGrid(Sender).DataSource.DataSet.FieldByName('圖片') then
bS := TBlobStream.Create(TBlobField(Table1.FieldByName('圖片')), bmWrite); // AdoTable1Picture為欄位名稱。
try
Pic:=TJpegImage.Create;
try
Pic.LoadFromStream(bS);
Image1.Picture.Assign(Pic);
finally
Pic.Free;
end;
finally
bS.Free
end;
end;end.
#include <stdlib.h>
#include <mysql/mysql.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>/*把文件读入内存,成功返回长度,不成功返回-1*/
int GetFile(const char *p_szFileName, char *p_buff)
{
struct stat l_stat;
FILE *ifp;
memset(&l_stat, 0, sizeof(struct stat));
if (stat(p_szFileName, &l_stat) == -1)
{
return -1;
}
ifp = fopen(p_szFileName, "rb");
if (ifp == NULL)
{
return -1;
}
if (fread(p_buff, l_stat.st_size, 1, ifp) < 1)
{
fclose(ifp);
return -1;
}
fclose(ifp);
return l_stat.st_size;
}/*把文件从内存写入硬盘,成功返回0,不成功返回-1*/
int WriteFile(const char *p_szFileName, const char *p_buff, const int p_iSize, int flag = 1)
{
int ret;
FILE *fp;
ret = access(p_szFileName, F_OK);
if (ret == 0 && flag != 1)
{
return -1;
}
if ((fp = fopen(p_szFileName, "wb")) == NULL)
{
return -1;
}
if (fwrite(p_buff, p_iSize, 1, fp) < 1)
{
fclose(fp);
unlink(p_szFileName);
return -1;
}
fclose(fp);
return 0;
}int main()
{
MYSQL my_con;
MYSQL_STMT *stmt;
MYSQL_BIND bind;
char l_buff[1024*1024];
int l_errno;
char l_sql[1024];
unsigned long l_flen;
if (mysql_init(&my_con) == NULL)
{
fprintf(stderr, "No enough memory!\n");
return EXIT_FAILURE;
} if (mysql_real_connect(&my_con, "192.168.33.66", "root", "xxxxxx", "test", 3306, NULL, 0) == NULL)
{
fprintf(stderr, "Connection failed\n");
if ((l_errno = mysql_errno(&my_con)) != 0)
{
fprintf(stderr, "Connection:\t<%d>\t%s\n", l_errno, mysql_error(&my_con));
}
return EXIT_FAILURE;
}
mysql_query(&my_con, "SET NAMES GBK");
memset(l_sql, 0, sizeof(l_sql));
//sprintf(l_sql, "INSERT INTO PERSON VALUES(46, '喆汎袆祎', ?, 'F', 23)");
sprintf(l_sql, "INSERT INTO PERSON VALUES(6, '我爱北京喆汎袆祎', ?, 'F', 23)");
stmt = mysql_stmt_init(&my_con);
if (stmt == NULL)
{
goto err_exit;
}
if (mysql_stmt_prepare(stmt, l_sql, strlen(l_sql)) != 0)
{
fprintf(stderr, "mysql_stmt_prepare failed!\n");
goto stmt_exit;
}
l_flen = GetFile("./6.jpg", l_buff);
if (l_flen == -1)
{
fprintf(stderr, "Read file error!\n");
mysql_stmt_close(stmt);
mysql_close(&my_con);
return EXIT_FAILURE;
}
memset(&bind, 0, sizeof(MYSQL_BIND));
bind.buffer_type = MYSQL_TYPE_BLOB;
bind.buffer_length = sizeof(l_buff);
bind.is_null = 0;
bind.length = &l_flen;
bind.buffer = l_buff;
if (mysql_stmt_bind_param(stmt, &bind) != 0)
{
fprintf(stderr, "BIND ERROR!\n");
goto stmt_exit;
}
fprintf(stdout, "%d\n", l_flen);
if (mysql_stmt_execute(stmt) != 0)
{
fprintf(stderr, "EXECUTE ERROR!\n");
goto stmt_exit;
}
mysql_stmt_close(stmt);
mysql_close(&my_con);
return EXIT_SUCCESS;stmt_exit:
fprintf(stderr, "%s\n", mysql_stmt_error(stmt));
mysql_stmt_close(stmt);
err_exit:
mysql_close(&my_con);
return EXIT_FAILURE;
}