我必须使用 JavaScript 创建一个表单,用户将上传一个 JPG 文件并与其他信息(例如姓名、电子邮件等)一起提交。当用户单击“提交”时,表单中的所有信息都将加载到值对象中。对于图像文件我将其设置为byte[]
.
所以假设:
public String name;
public String email;
public byte[] logo;
我还设置了一个 servlet 来处理提交,但我不知道如何开始。上传是如何进行的?当用户提交时,如何获取图像的信息?这是一个屏幕截图:http://imageshack.us/f/32/77675354.png/ http://imageshack.us/f/32/77675354.png/我需要转换该图像并将其保存到byte[]
然后转换为 blob,以便我可以将其插入到表中。
对于文件上传部分,需要设置enctype="multipart/form-data"
在 HTML 表单上,以便网络浏览器将发送文件内容并且您想要使用request.getPart()
在 servlet 中doPost()
获取文件的方法InputStream
。具体代码示例,另请参见如何使用JSP/Servlet上传文件到服务器? https://stackoverflow.com/questions/2422468/how-to-upload-files-in-jsp-servlet/2424824#2424824
然后,保存这个InputStream
在数据库中,只需使用PreparedStatement#setBinaryStream() http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setBinaryStream%28int,%20java.io.InputStream%29 on a 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
to byte[]
,它也不会提高内存效率。想象一下,100 个用户同时上传 10MB 的图像,那么此时将分配 1GB 的服务器内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)