我必须使用JavaScript创建一个表单,用户将上载JPG文件并与其他信息(例如名称,电子邮件等)一起提交。当用户单击提交时,表单中的所有信息将被加载到值对象中。对于图像文件,我将其设置为byte[]。
byte[]
所以假设:
public String name; public String email; public byte[] logo;
我还设置了一个servlet来处理提交,但是我不确定如何开始。上传如何进行?用户提交时,如何获取图像信息?这是屏幕截图:http : //imageshack.us/f/32/77675354.png/我需要转换该图像并将其保存为a,byte[]然后转换为blob,以便将其插入到表中。
对于文件上传部分,您需要enctype="multipart/form- data"在HTML表单上进行设置,以便Web浏览器将发送文件内容,并且您希望request.getPart()在servlet的doPost()方法中使用来将文件获取为InputStream。有关具体的代码示例,另请参见如何使用JSP / Servlet将文件上传到服务器?
enctype="multipart/form- data"
request.getPart()
doPost()
InputStream
然后,保存此InputStream的DB,只需使用PreparedStatement#setBinaryStream()上BLOB/ varbinary/ bytea列或任何列表示您最喜欢的数据库引擎“二进制数字”。
PreparedStatement#setBinaryStream()
BLOB
varbinary
bytea
preparedStatement = connection.prepareStatement("INSERT INTO user (name, email, logo) VALUES (?, ?, ?)"); preparedStatement.setString(1, name); preparedStatement.setString(2, email); preparedStatement.setBinaryStream(3, logo); // ...
您不一定需要将其转换InputStream为byte[],也不会提高内存效率。假设有100个用户同时上传10MB的图像,那么此时将分配1GB的服务器内存。