java图片应该用什么流上传?请问用Java 如何实现图片上传功能
各位老铁们,大家好,今天由我来为大家分享java图片应该用什么流上传,以及请问用Java 如何实现图片上传功能 的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
java web项目中有很多的图片,如何存放
一般有两种情况,
一种是前端开发需要显示的图片,这个是页面构成必须的元素,一般这些会做动静分离,后台接口跟前端资源会部署在不同的服务器上,有不同的优化,一般会有转发的服务器,判断是后台接口,就转发到后台的服务器,如果是前端资源,就转发到前台的服务器。一般情况下,前端服务器,跟后台的服务器,是分离开的,有不同的人去管理,如果项目小的话,可能就全放在一个。这个优化的化,你可以去了解下 CDN原理。这个是用来优化静态资源加载情况的。
另一种情况是,显示的图片,不是前端构成的,是用户上传文件产生的,这种情况下,现在一般有专门的对象存储,用过七牛云,跟阿里的。这个的逻辑是文件上传的时候,不是上传到我们自己的服务器,上传到专门的云服务器,我们自己数据库只需要保存这些上传文件的地址,真正使用的时候,把连接给前端,前端自动会根据内容到专门的云服务器上去获取。所有的安全,优化,带宽,缓存命中,这些都有由云服务器去保证。简单来说,只有有钱,这些东西根本不会成为你项目的瓶颈。
作为技术,我们讨论的应该不是这些。图片会做备份,这个可以有专门的磁盘阵列去实现,简单来说,就是上传的内容保存到磁盘的时候,会自动多保存几个备份到不同的磁盘上。还是那句话,多去了解下CDN的原理,最后这段,个人理解,不一定对。
java实现图片上传至服务器并显示,如何做
给你段代码,是用来在ie上显示图片的(servlet):
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String id= request.getParameter("id");
File file= new File(getServletContext().getRealPath("/")+"out"+"/"+id+".gif");
response.setCharacterEncoding("gb2312");
response.setContentType("doc");
response.setHeader("Content-Disposition","attachment; filename="+ new String(file.getName().getBytes("gb2312"),"iso8859-1"));
System.out.println(new String(file.getName().getBytes("gb2312"),"gb2312"));
OutputStream output= null;
FileInputStream fis= null;
try
{
output= response.getOutputStream();
fis= new FileInputStream(file);
byte[] b= new byte[1024];
int i= 0;
while((i= fis.read(b))!=-1)
{
output.write(b, 0, i);
}
output.write(b, 0, b.length);
output.flush();
response.flushBuffer();
}
catch(Exception e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
{
if(fis!= null)
{
fis.close();
fis= null;
}
if(output!= null)
{
output.close();
output= null;
}
}
}
这个程序的功能是根据传入的文件名(id),来为浏览器返回图片流,显示在<img>标签里
标签的格式写成如下:
<img src="http://localhost:8080/app/preview?id=111"/><br/>
显示的是111.gif这个图片
你上面的问题:
1.我觉得你的第二个办法是对的,我们也是这样做的,需要的是把数据库的记录id号传进servlet,然后读取这条记录中的路径信息,生成流以后返回就是了
关于上传文件的问题,我记得java中应该专门有个负责文件上传的类,你调用就行了,上传后存储在指定的目录里,以实体文件的形式存放
你可以参考这个:
http://blog.csdn.net/arielxp/archive/2004/09/28/119592.aspx
回复:
1.是的,在response中写入流就行了
2.是发到servlet中的,我们一般都是写成servlet,短小精悍,使用起来方便,struts应该也可以,只是我没有试过,恩,你理解的很对
请问用Java 如何实现图片上传功能
我有一段上传图片的代码,并且可以根据实际,按月或按天等,生成存放图片的文件夹
首先在JSP上放一个FILE的标签这些我都不说了,你也一定明白,我直接把处理过程给你发过去
我把其中存到数据库中的内容删除了,你改一下就能用
/**
*
*上传图片
*@param servlet
*@param request
*@param response
*@return
*@throws Exception
*/
//这里我是同步上传的,你随意
public synchronized String importPic(HttpServlet servlet, HttpServletRequest request,HttpServletResponse response) throws Exception{
SimpleDateFormat formatDate= new SimpleDateFormat("yyyyMM");
Date nowtime=new Date();
String formatnowtime=formatDate.format(nowtime);
File root= new File(request.getRealPath("/")+"uploadfile/images/"+formatnowtime+"/");//应保证在根目录中有此目录的存在如果没有,下面则上创建新的文件夹
if(!root.isDirectory())
{
System.out.println("创建新文件夹成功"+formatnowtime);
root.mkdir();
}
int returnflag= 0;
SmartUpload mySmartUpload=new SmartUpload();
int file_size_max=1024000;
String ext="";
String url="uploadfile/images/"+formatnowtime+"/";
//只允许上载此类文件
try{
//初始化
mySmartUpload.initialize(servlet.getServletConfig(),request,response);
mySmartUpload.setAllowedFilesList("jpg,gif,bmp,jpeg,png,JPG");
//上载文件
mySmartUpload.upload();
} catch(Exception e){
response.sendRedirect()//返回页面
}
com.jspsmart.upload.File myFile= mySmartUpload.getFiles().getFile(0);
if(myFile.isMissing()){//没有选择图片做提示!
returnflag= 3;
}else{
String myFileName=myFile.getFileName();//取得上载的文件的文件名
ext= myFile.getFileExt();//取得后缀名
if(ext.equals("jpg")||ext.equals("gif")||ext.equals("bmp")||ext.equals("jpeg")||ext.equals("png")||ext.equals("JPG")){//jpeg,png不能上传!)
int file_size=myFile.getSize();//取得文件的大小
String saveurl="";
if(file_size<file_size_max){
try{
//我上面说到,把操作数据库的代友删除了,这里就应该是判断,你的图片是不是已经存在了,存在要怎么处理,不存在要怎么处了,就是你的事了}
//更改文件名,取得当前上传时间的毫秒数值
Calendar calendar= Calendar.getInstance();
//String filename= String.valueOf(calendar.getTimeInMillis());
String did= contractBean.getMaxSeq("MULTIMEDIA_SEQ");
String filename= did;
String flag="0";
String path= request.getRealPath("/")+url;
String ename= myFile.getFileExt();
//.toLowerCase()转换大小写
saveurl=request.getRealPath("/")+url;
saveurl+=filename+"."+ext;//保存路径
myFile.saveAs(saveurl,mySmartUpload.SAVE_PHYSICAL);
//将图片信息插入到数据库中
//------上传完成,开始生成缩略图-----
java.io.File file= new java.io.File(saveurl);//读入刚才上传的文件
String newurl=request.getRealPath("/")+url+filename+"_min."+ext;//新的缩略图保存地址
Image src= javax.imageio.ImageIO.read(file);//构造Image对象
float tagsize=200;
int old_w=src.getWidth(null);
int old_h=src.getHeight(null);
int new_w=0;
int new_h=0;
int tempsize;
float tempdouble;
if(old_w>old_h){
tempdouble=old_w/tagsize;
}else{
tempdouble=old_h/tagsize;
}
// new_w=Math.round(old_w/tempdouble);
// new_h=Math.round(old_h/tempdouble);//计算新图长宽
new_w=150;
new_h=110;//计算新图长宽
BufferedImage tag= new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);//绘制缩小后的图
FileOutputStream newimage=new FileOutputStream(newurl);//输出到文件流
JPEGImageEncoder encoder= JPEGCodec.createJPEGEncoder(newimage);
encoder.encode(tag);//近JPEG编码
newimage.close();
returnflag= 1;
}else{
returnflag= 0;
System.out.println("('上传文件大小不能超过"+(file_size_max/1000)+"K');");
}
}else{
returnflag= 2;
}
}
response.sendRedirect();
return"11";
}
OK,本文到此结束,希望对大家有所帮助。