用mysql存储图片及其显示

在我们设计和制作网站的过程中,有时把图片保存到数据库中要比存成文件的形式更加方便。PHP和MySQL这对黄金组合可以很容易的实现上述功能。在本文中,我们将会向读者介绍如何把图片保存到MySQL数据库中以及如何将数据库中的图片显示出来。

 

设置数据库
  我们通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之处就在于两者所需要保存的数据量不同。MySQL数据库使用专门的字段来保存大容量的数据,数据类型为BLOB。

 

  MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可变数量的数据。BLOB具有四种类型,分别是TINYBLOB,BLOB, MEDIUMBLOB 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。

 

  在介绍了所需要使用的数据类型之后,我们可以使用以下语句创建保存图象的数据表。
  CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );

 

编写上传脚本
  关于如何实现文件的上传,我们在这里就不再介绍了。现在,我们主要来看一下如何接收上传文件并将其存入到MySQL数据库中。具体的脚本代码如下,其中我们假定文件上传域的名称为Picture。

 

<? If($Picture != "none") { $PSize = filesize($Picture); $mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize)); mysql_connect($host,$username,$password) or die("Unable to connect to SQL server"); @mysql_select_db($db) or die("Unable to select database"); mysql_query("INSERT INTO Images (Image) VALUES '($mysqlPicture')") or die("Can't Perform Query"); } else { echo"You did not upload any picture"; } ?>

 

  这样,我们就可以成功的把图片保存到数据库中。如果在将图片插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录。

 

  下面,我们简单说明一下上述脚本程序。首先,我们通过“If($Picture != "none")”检查是否有文件被上传。然后,使用addslashes()函数避免出现数据格式错误。最后,连接MySQL,选择数据库并插入图片。

 

显示图片
 在知道了如何将图片存入数据库之后,我们就需要考虑怎样才能从数据库中取出图片并在HTML页面中显示出来。这个过程要稍微复杂一些,下面我们就来介绍一下实现过程。

 

因为PHP显示图片需要发送相应的标头,所以我们就会面临这样一个问题,那就是一次只能显示一副图片,因为我们无法在发出标头之后再发送其它的标头。

 

为了有效的解决这一问题,我们编写了两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为<IMG>标签的SRC属性。

 

第一个文件的简单形式可以如下:

 

<HTML> <BODY> <? mysql_connect($host,$username,$password) or die("Unable to connect to SQL server"); @mysql_select_db($db) or die("Unable to select database"); $result=mysql_query("SELECT * FROM Images") or die("Can't Perform Query"); While($row=mysql_fetch_object($result)) { echo "<IMG SRC=/"Second.php3? PicNum=$row->PicNum/">"; } ?> </BODY> </HTML>

 

  当HTML页面被浏览时,每显示一副图片就会调用一次Second.php3文件。当第二个文件被调用时会传入相应的Picture ID,我们可以借此从数据库中取回对应的图片并显示。

 

Second.php3文件如下:

 

<? $result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Can't perform Query"); $row=mysql_fetch_object($result); Header( "Content-type: image/gif"); echo $row->Image; ?>

 

  到此,我们就介绍完了使用PHP和MySQL保存和显示图片的全过程。文中所举得都是一些最简单的实例,读者可以根据自己的实际需要加入其它一些功能,使整个程序更加完善。

### 回答1: 可以使用 Spring Boot 中的 JPA 来存储图片MySQL 数据库。首先,在数据库中建立一张表,其中一列用来存储图片,类型为 BLOB。然后在实体类中使用 `@Lob` 注解将该字段映射到 BLOB类型。在存储图片时,可以将图片转换为字节数组,并将其存储到对应的字段中。 ### 回答2: Spring Boot是一个极为方便的应用框架,可以帮助开发者快速地构建出各种应用。在进行web应用开发的过程中,经常需要实现图片的上传、处理和存储等功能,而本文将从如何使用Spring Boot的方式进行图片存储Mysql数据库的操作方法介绍。 首先,我们需要为Spring Boot应用添加对MySQL数据库的支持,并在pom.xml文件中添加相关的依赖,如下所示: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 在创建实体类时,需要使用JPA规范进行注解,在实体类中添加一个属性,用于保存图片的二进制流。 ``` @Entity @Table(name = "image") public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String imageName; private byte[] imageContent; //getter/setter } ``` 接下来,需要编写一个Controller类,用于处理图片上传的请求,代码如下: ``` @RestController @RequestMapping("/image") public class ImageController { private final ImageRepository imageRepository; @Autowired public ImageController(ImageRepository imageRepository) { this.imageRepository = imageRepository; } @PostMapping("/upload") public ResponseEntity<?> upload(@RequestParam("image") MultipartFile multipartFile) { try { Image image = new Image(); image.setImageName(multipartFile.getOriginalFilename()); image.setImageContent(multipartFile.getBytes()); imageRepository.save(image); return new ResponseEntity<>(HttpStatus.OK); } catch (IOException e) { e.printStackTrace(); return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } } } ``` 其中,upload()方法负责处理上传请求,首先从MultipartFile对象中获取文件名和文件内容,将其保存到Image实体类的属性中,然后通过JPA规范中的save()方法将Image对象存储数据库中。 最后,需要编写一个JpaRepository的接口,继承于CrudRepository,并实现数据访问的方法,代码如下: ``` public interface ImageRepository extends CrudRepository<Image, Integer> { } ``` 接下来,所有的准备工作已经完成了,我们运行起来程序,上传一张名为“test.jpg”的图片成功插入到MySQL数据库中。 综上,本文介绍了使用Spring Boot存储图片MySQL数据库的方法,主要包括添加MySQL依赖,实现图片存储的实体类和Controller类以及访问数据的repository接口各个步骤。对于图片的上传和存储,Spring Boot提供了简便易行的方法,为web开发带来了极大的便利。 ### 回答3: Spring Boot 是一种用于构建独立应用程序的框架,它可以方便地将应用程序部署到不同的平台上。在许多应用程序中,我们可能需要将用户上传的图片保存到数据库中。本文将介绍如何在Spring Boot中将图片存储MySQL数据库中。 在Spring Boot中,使用JPA(Java Persistence API)来管理对象持久化。我们可以通过使用 JPA 来操作数据库中的数据。为了将图片存储MySQL数据库中,需要创建一个表来存储图片的二进制数据。我们可以通过以下代码创建一个名为`Image`的实体类: ```java @Entity @Table(name = "images") public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; @Column(name = "image_data") private byte[] data; // getters, setters and constructors } ``` 在上面的代码中,我们使用了`@Entity`和`@Table`注解来指示这是一个实体类,并定义了一个`id`作为主键。我们还用注解`@GeneratedValue`来指定主键的自动生成策略。此外,我们还定义了一个`name`来保存图片名称,并使用`@Column`注解定义了一个`data`字段来保存图片的二进制数据。 接下来,我们需要使用Spring Boot提供的`MultipartFile`类来从上传的文件中读取二进制数据。我们可以使用以下代码将图片保存到MySQL数据库中: ```java @PostMapping("/upload") public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) { if(file.isEmpty()) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Please select a file to upload"); } try { Image image = new Image(); image.setName(file.getOriginalFilename()); image.setData(file.getBytes()); imageRepository.save(image); return ResponseEntity.ok("File uploaded successfully"); } catch (IOException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error occurred while uploading file"); } } ``` 在上面的代码中,我们首先检查文件是否为空。接下来,我们使用`getBytes()`方法从`MultipartFile`中读取二进制数据,并创建一个`Image`对象。然后调用`imageRepository.save()`将图片保存到MySQL数据库中。 最后,我们可以使用以下代码从MySQL数据库中检索图片: ```java @GetMapping("/{id}") public ResponseEntity<?> getImage(@PathVariable("id") Long id) { Image image = imageRepository.findById(id).orElse(null); if(image == null) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Image not found"); } else { return ResponseEntity.ok() .contentType(MediaType.IMAGE_JPEG) .body(new ByteArrayResource(image.getData())); } } ``` 在上面的代码中,我们使用`findById`方法根据ID从MySQL数据库中检索图片。如果找不到图片,则返回一个HTTP 404 Not Found响应。如果找到图片,则返回一个HTTP 200 OK响应,其中的内容类型被设置为JPEG图片,并将图片的二进制数据作为响应主体发送。 总结来说,将图片存储MySQL数据库中是非常容易的,只需要使用Spring Boot提供的JPA和MultipartFile类即可实现。上述代码只是一个简单的示例,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值