当前需求:python爬取图片后到后端进行存储到MongoDB
第一次做全栈图片存储的项目,记录一下
@Data
@Document
@Accessors(chain = true)
public class PicUpload implements Serializable {
@Id
private String id;
private Binary content;
private String contentType;
}
这个是MongoDB存储的对象格式
response = requests.get("https://img2.baidu.com/it/u=1685092271,2574681286&fm=253&fmt=auto&app=120&f=JPEG?w=1200&h=797").content
requests.post(url="http://localhost:8080/test",data=response)
python的脚本只做个示例,第一行是获取图片的二进制数据,第二行是把二进制数据发到后端接口去,具体处理方法看后端
private final MongoTemplate mongoTemplate;
/**
* 图片上传
*/
@PostMapping("/uploadFolder")
public String uploadImage(HttpServletRequest request) throws IOException {
ServletInputStream inputStream = request.getInputStream();
Binary binary = new Binary(toByteArray(inputStream));
PicUpload picUpload = new PicUpload()
.setContent(binary)
.setContentType("image/jpeg");
PicUpload savedFile = mongoTemplate.save(picUpload);
return savedFile.getId();
}
/**
* 获取图片
*/
@GetMapping(value = "/image/{id}", produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE})
public byte[] image(@PathVariable("id") String id) {
byte[] data = null;
PicUpload file = mongoTemplate.findById(id, PicUpload.class);
if (file != null) {
data = file.getContent().getData();
}
return data;
}
public static byte[] toByteArray(InputStream input) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024*4];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
return output.toByteArray();
}
第一个方法:获取python传来的二进制数据并通过第三个方法转为byte数据再封装成Binary进行存储即可
第二个方法:看图片的,浏览器直接访问就可以看到了
第三个方法:把inputStream转为byte
并没有什么难点,主要是第一次,记录一下