从服务器上面根据url下载附件然后存到数据库中去
写在前面,首先咱们要做下载附件存到数据库中需要的几个步骤
- 根据url下载附件
- 把下载的附件转化为2进制
- 把二进制作为大字段存到数据库指定表的指定字段中去
ok,现在咱们了解到需要怎样的步骤了,接下开就去具体看看怎么做
根据url下载附件
还是一样,咱们先想一下下载附件需要的几个步骤
- 确定自己的url地址
- 用输入输出流来获取自己的附件
- 确定一下要下载到的目录
确定了怎么做,下面咱们上代码,注释我写的很清楚了,我就不多解释了
/**
* 根据Url下载url中的附件
* @param urlStr
* @param fileName
* @param savePath
* @throws IOException
*/
public static void downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{
//确定自己的url地址
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //连接
//设置超时间为3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)");
//得到输入流
InputStream inputStream = conn.getInputStream();
//获取自己数组(方法在下面)
byte[] getData = readInputStream(inputStream);
//文件保存位置(文件下载后的位置)
File saveDir = new File(savePath);
if(!saveDir.exists()){
saveDir.mkdir();
}
File file = new File(saveDir+File.separator+fileName);
FileOutputStream fos = new FileOutputStream(file);
fos.write(getData);
if(fos!=null){
fos.close();
}
if(inputStream!=null){
inputStream.close();
}
//打印一下,顺便作为文件成功下载的标记
System.out.println("info:"+url+" download success");
}
/**
* 从输入流中获取字节数组
* @param inputStream
* @return
* @throws IOException
*/
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
/**
* main方法测试
* @String args
*/
public static void main(String[] args) {
try{
//这个地址你们是访问不到,因为网络限制,测试的话放自己可以访问的地址哦
downLoadFromUrl("http://101.95.48.97:8005/res/upload/interface/apptutorials/manualstypeico/6f83ce8f-0da5-49b3-bac8-fd5fc67d2725.png", "百度.jpg","d:/resource/images/diaodiao/country/");
}catch (Exception e) {
// TODO: handle exception
}
}
把下载的附件转化为二进制记录到数据库中去
(2,3步骤放一块写了)步骤
- 附件路径
- 字节流转换
- 记录到数据库中
话不多说直接上代码
public void pdf() throws Exception{
try {
//实体自定义
XxfbJcjb xxfbJcjb = new XxfbJcjb();
File file = new File("C:\\Users\Administrator\Desktopl\pdf\\系统使用说明.pdf");
//字节流转换赋值
xfbJcjb.setJbnr(getBytesFromFile(file));
//插库操作具体方法不在赘述
xxfbJcjbMapper . insertSelective(xxfbJcjb);
//String Jbnr=getBytesFromFile(file);
} catch (Exception e) {
LogUtil error(getClass(), ”操作出错",e);
}
}
public static byte[] getBytesFromFile(File f ){
if (f = nul1){
return nul1;
}
try{
//开通文件输入输出流
FileInputStream stream = new FileInputStream(f);
ByteArrayutputstreom out = new
ByteArrayOutputstrean();
byte[] b = nen byte[1000];
int n;
while ((n = stream.read(b) != -1){
out.write(b,0,n);
}
stream.close();
out.close;
//转换后的二进制数据
return out.toByteArray();
}catch(IOException e){
}
return null ;
}
}