我在mySQL中有一个表,它有一个名为“image”的字段,数据类型为“BLOB”。我想知道是否可以直接从命令行客户端上传该字段中的图像,而不是通过php进行...如果有可能,那么我应该在哪里放置我的图像文件?
答案 0 :(得分:25)
尝试使用LOAD_FILE()功能。
UPDATE `certain_table`
SET image = LOAD_FILE('/full/path/to/new/image.jpg')
WHERE id = 1234;
有关文件名,权限等路径的要求,请参阅手册
答案 1 :(得分:6)
LOAD_FILE
仅适用于某些特权且文件位于服务器上。我发现了一种让它完全在客户端工作的方法:
mysql -e "update mytable set image=FROM_BASE64('`base64 -i image.png`')" DBNAME
我的想法是动态地将图像编码为base64,然后让MySql对其进行解码。
答案 2 :(得分:3)
这是 Teudimundo 的答案的变体,适用于较旧的MySQL版本,其中Base64功能不可用:
mysql -e "update mytable set col = x'$(xxd -p image.png | tr -d \\n)' where ..."
诀窍是使用xxd -p
将二进制文件转换为普通的hexdump:
$ xxd -p /usr/share/font-manager/data/blank.png
89504e470d0a1a0a0000000d4948445200000040000000400806000000aa
6971de000000274944415478daedc1010d000000c220fba77e0e37600000
00000000000000000000000000c0bd0040400001ee1dbb2f000000004945
4e44ae426082
然后使用tr -d \\n
删除换行符,最后将结果嵌入到特定于MySQL的hexdump字符串文字中:x'...'
答案 3 :(得分:2)
我建议你不要直接在数据库中上传图片,效率很低。最好只存储图像的位置和名称,并将这些图像存储在某个文件夹中。
如果你想通过命令行“上传”,你可以做一个:
insert into table(image_loc) values('/images/random/cool.jpg') where id=1;
根据您的环境,您可以使用shell访问来移动图像。我不太确定你要对这些图像做什么,或者你的系统是如何设置的。你可能需要澄清一下。
答案 4 :(得分:0)
最好构建一个示例应用程序,然后将值插入数据库中。例如,此方法可用于将BLOB数据类型输入数据库...
[WebMethod]
public string sendDataToMySql(string get_name, byte[] buffer)
{
string MyConString = "SERVER=localhost;" +
"DATABASE=test;" +
"UID=root;" +
"PASSWORD=admin;";
MySqlConnection connection = new MySqlConnection(MyConString);
connection.Open();
MySqlCommand command = new MySqlCommand("", connection);
command.CommandText = "insert into testImage(name, image) values(@name, @image);";
MySqlParameter oParam1 = command.Parameters.Add("@name", MySqlDbType.VarChar, 50);
oParam1.Value = get_name;
MySqlParameter oParam2 = command.Parameters.Add("@image", MySqlDbType.Blob);
oParam2.Value = buffer;
command.ExecuteNonQuery();
connection.Close();
return "Data was inserted successfully!";
}
答案 5 :(得分:0)
有时我们尝试使用loadfile上传文件,但未加载文件或格式化文本中的文件路径存储在BLOB字段中。这是因为访问问题。如果你遇到这种情况,而不是从任何位置加载文件,尝试从mysql的数据路径加载它,最好是:
INSERT INTO `srms`.`images` (`ID`, `Image`) VALUES ('5', load_file('C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\test.jpg'));