关于邮件附件上传 1.我想把上传的附件用JAVA流的方式写入到数据库里面,然后再来读取,请问有人这样做吗?2.有什么办法能有效防止上传.exe之类的文件了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用CLOB类型的字段存储,CLOB字段最大支持4GB ls的,那种方法好一点,我倒是没用clob存过 1.我想把上传的附件用JAVA流的方式写入到数据库里面,然后再来读取,请问有人这样做吗? 可以将上传的附件作为二进制流写入到数据库里面。保存的时候用一个字段来存文件名称(至少需要文件扩展名称),用另一个字段来存文件体(二进制流)。 在读取的时候,将文件体(二制流)以及文件名读取出来就可以了,读取时代码如下: //获得数据表内容(文件内容) String fileName = rs.getString(5); InputStream fileCtStr = rs.getBinaryStream(8); //实例文件对象,文件名 File otfile = new File("D:\\EmailFile\\"+fileName); try { //实例文件输出流对象 FileOutputStream fouts = new FileOutputStream(otfile); //实例字节数组缓冲对象(1KB) byte[] buffer = new byte[1024]; int nowRead; //将文件内容写入文件 while((nowRead=fileCtStr.read(buffer))!=-1) { fouts.write(buffer, 0, nowRead); } //关闭文件输出流对象 fouts.close(); } catch (FileNotFoundException e) { flag = false; e.printStackTrace(); } catch (IOException e) { flag = false; e.printStackTrace(); } 2.有什么办法能有效防止上传.exe之类的文件了。 防止上付.exe或者其它类型的文件名,可以去获取文件名的扩展名,但最好应该是要获取文件类型来作判断。 google mail好像是用的获取文件类型来作判断。 上传到文件,在数据库存地址。exe的话不知道能不能判断后缀,也就是最后个.后面的字符串 exe判断后缀没意义,改个后缀名一样再上传。 1.数据库用BLOB,存文本文件或二进制流文件都可以。楼上的楼上的楼上。。的楼上说的CLOB只能存纯文本文件。2.只要判断后缀就可以了,改了后缀它也执行不了。可以将所有的exe,com,bat,sh等等文件类型做个判断。或者允许它上传,但是传完了在你的系统里面都加上固定后缀。比如a.exe变成a.exe.mailattachment。 crazylaa 办法是个好点子。 晕,是上传不成功吧?写文件应该都成功的。上传用input type=file(就是那个smartupload里面用的),在文件比较大的情况下,数量一多网络又不咋滴的情况下就会失败。大文件批量上传要保证稳定性正确性,还是利用ActiveX(支持ftp或http并可以做到断点续传)或Java Applet(应该也可以做到断点续传)或ADODB.Stream(不知道能不能做到断点续传)来做比较好。 比如a.exe变成a.exe.mailattachment要是有人这样改了后缀了比如a.exe变成a.exe.mailattachment.exe 或者传一个.bat文件a.bat.mailattachment.bat nono,不是这个意思,我的意思是,比如它改的文件名字符串一长串 String filename=“aaa.bb.cc”;那么我保存的时候,就filename += ".mailattachment";当然,filename最好用文件存在数据库的那个ID代替,我这里只是举个例子,就是不管他是什么,我反正最后给你加上这么一段。 最近在试java zip想把上传文件都压缩,可是zip的乱码又没有解决。 随机数抽取问题 如果用纯JDBC做DAO层的话? 学习JAVA二个月写的计算器程序 提取网页中的链接关系 求助:一个java中的序列化机制 问问 !及此事可不可以用java二次开发AutoCAD 求救! 恳请您伸出援助之手!帮帮小弟!SAX解析XML问题 为什么一直提示can not access class/directory 您有管理配置文件的Java原码以及类吗?? 这个内部类错在哪了? List的用法
可以将上传的附件作为二进制流写入到数据库里面。保存的时候用一个字段来存文件名称(至少需要文件扩展名称),用另一个字段来存文件体(二进制流)。
在读取的时候,将文件体(二制流)以及文件名读取出来就可以了,读取时代码如下:
//获得数据表内容(文件内容)
String fileName = rs.getString(5);
InputStream fileCtStr = rs.getBinaryStream(8);
//实例文件对象,文件名
File otfile = new File("D:\\EmailFile\\"+fileName);
try
{
//实例文件输出流对象
FileOutputStream fouts = new FileOutputStream(otfile);
//实例字节数组缓冲对象(1KB)
byte[] buffer = new byte[1024];
int nowRead;
//将文件内容写入文件
while((nowRead=fileCtStr.read(buffer))!=-1)
{
fouts.write(buffer, 0, nowRead);
}
//关闭文件输出流对象
fouts.close();
} catch (FileNotFoundException e)
{
flag = false;
e.printStackTrace();
} catch (IOException e)
{
flag = false;
e.printStackTrace();
}
2.有什么办法能有效防止上传.exe之类的文件了。
防止上付.exe或者其它类型的文件名,可以去获取文件名的扩展名,但最好应该是要获取文件类型来作判断。
2.只要判断后缀就可以了,改了后缀它也执行不了。可以将所有的exe,com,bat,sh等等文件类型做个判断。或者允许它上传,但是传完了在你的系统里面都加上固定后缀。比如a.exe变成a.exe.mailattachment。
晕,是上传不成功吧?写文件应该都成功的。
上传用input type=file(就是那个smartupload里面用的),在文件比较大的情况下,数量一多网络又不咋滴的情况下就会失败。大文件批量上传要保证稳定性正确性,还是利用ActiveX(支持ftp或http并可以做到断点续传)或Java Applet(应该也可以做到断点续传)或ADODB.Stream(不知道能不能做到断点续传)来做比较好。
a.bat.mailattachment.bat
nono,不是这个意思,我的意思是,比如它改的文件名字符串一长串
String filename=“aaa.bb.cc”;
那么我保存的时候,就
filename += ".mailattachment";
当然,filename最好用文件存在数据库的那个ID代替,我这里只是举个例子,就是不管他是什么,我反正最后给你加上这么一段。