`
步青龙
  • 浏览: 298753 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

上传图片 图片服务器

阅读更多

 

package cms.xxx.common.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.struts2.ServletActionContext;

import cms.xxx.common.struts2.action.BaseAction;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 保证有commons-fileupload.jar,Commons-io.jar,注意jsp传过来的File的name="imgFile",配置文件加上<interceptor-ref name="fileUploadStack"></interceptor-ref>
 * 包含上传的只需要继承FileUploadAction,自定义一个方法,使用FileUploadAction属性操作上传,例子cms.huisou.info.action.AddHcinfoAct的upload,需要上传的时候只需要this.upload();
 */
public class FileUploadAction extends BaseAction {
	org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest f;
	protected static final int BUFFER_SIZE = 16 * 1024;
	protected File imgFile;
	protected String imgFileContentType;
	protected String imgFileFileName;
	public File getImgFile() {
		return imgFile;
	}
	public void setImgFile(File imgFile) {
		this.imgFile = imgFile;
	}
	public String getImgFileContentType() {
		return imgFileContentType;
	}
	public void setImgFileContentType(String imgFileContentType) {
		this.imgFileContentType = imgFileContentType;
	}
	public String getImgFileFileName() {
		return imgFileFileName;
	}
	public void setImgFileFileName(String imgFileFileName) {
		this.imgFileFileName = imgFileFileName;
	}
	protected static void copy(File src, File dst) {
		try  {
            InputStream in = null ;
            OutputStream out = null ;
             try  {                
                in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
                out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                 byte [] buffer = new byte [BUFFER_SIZE];
                 while (in.read(buffer) > 0 )  {
                    out.write(buffer);
                } 
             } finally  {
                 if ( null != in)  {
                    in.close();
                } 
                  if ( null != out)  {
                    out.close();
                } 
            } 
         } catch (Exception e)  {
            e.printStackTrace();
        } 
	}
	protected static String getExtention(String fileName) {
		int pos = fileName.lastIndexOf(".");
		return fileName.substring(pos);
	}
}
 class AddHcinfoAct extends FileUploadAction 代码写道 

 

	public void upload() {
		 	imgFileFileName = new Date().getTime()+ getExtention(imgFileFileName);
			File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages")+ "/" + imgFileFileName);
			copy(imgFile, imageFile);
	}
	 

 

注意JSP提交的时候加上:  

 

 enctype="multipart/form-data"

 

然后在相应的方法调用this.upload()即可

 

 

好一段时间因为时间忙,偶尔光顾下javaeye。

我记得以前做过用htmlparser抓取的img标签,然后要把所有的图片上传到图片服务器上,这期间经历了好多的波折,刚开始直接写流,不行,因为想javaeye,百度等有的图片路径是非正常路径的。比如:www.javaeye/upload/test.jpg2005-1-1/ 这显示的是一个图片,但是我写流就出现了问题,而且对百度的图片不能抓取。第二次改进方案,用百度爬虫写流,但是我不知道为何,到上传到服务器后图片变形了。这种方案不行,后来用了httpclient,当我试啦试百度和javaeye后,很惊喜,都可以,后来测试了很多的非正常的图片,也未发现有不行的情况存在。 

 

1: 普通的地址图片上传,只能上传普通的地址一般是后缀jpg,png,gif之类的图片。其中imgurl是图片地址路径,disppath为保存的文件夹,name是文件名

 

URL u = new URL(imgurl);  
URLConnection uc = u.openConnection();  
InputStream in = uc.getInputStream();  
OutputStream out = new FileOutputStream(disppath+ name);  
byte[] buffer = new byte[1024];  
while (in.read(buffer) > 0) {  
    out.write(buffer);  
}  
out.flush();  
out.close();  
in.close();  

 2: 可以上传特殊的图片,后缀可以是/180,/order等等特殊图片路径的

 

public   void readFileAndWrite(String Stringurl,String targetPath) {  
    try {  
        System.getProperties();  
  
        URL url = new URL(Stringurl);  
        URLConnection urlconnection = url.openConnection();  
        urlconnection.setDoInput(true);  
        urlconnection.setDoOutput(true);  
        urlconnection.setUseCaches(false);  
        urlconnection.setRequestProperty("User-Agent",  
                "Baiduspider+(+http://www.baidu.com/search/spider.htm)");  
        urlconnection.setRequestProperty("Content-Type",  
                "application/x-www-form-urlencoded");  
        InputStream input = urlconnection.getInputStream();  
        File dest = new File(targetPath);  
        FileOutputStream out = new FileOutputStream(dest);  
        int b = 0;  
        while((b= input.read())!=-1)  
              
        out.write(b);  
        out.close();  
        input.close();  
    } catch (Exception u8e) {  
        log.error(u8e.getMessage());  
        throw new RuntimeException(u8e.getMessage());  
    }  
}  

 3: 上面两种可能方,案都不能上传这样的图片百度很特殊的图片,百度图片屏蔽啦一些不法的读取文件,下面是模拟客户端来抓取图片,上传需要三个jar包:httpcore-4.0.1.jar,httpclient-4.0.jar,commons-logging-1.1.1.jar,代码实例:

 

HttpClient httpclient = new DefaultHttpClient();  
String url = "http://img.baidu.com/img/iknow/adphoto/Uhuoqb.jpg";  
// 生成一个请求对象  
HttpGet httpget = new HttpGet(url);  
httpget.setHeader("referer", "http://www.baidu.com/");  
// 执行请求  
HttpResponse response = httpclient.execute(httpget);  
HttpEntity entity = response.getEntity();  
  
if (entity != null) {  
    InputStream in = entity.getContent();  
    int b = 0;  
    FileOutputStream out = new FileOutputStream("a.jpg");  
    while ((b = in.read()) != -1) {  
        System.out.println(b);  
        out.write(b);  
    }  
    out.close();  
    in.close();  
  
}  
httpclient.getConnectionManager().shutdown();  

 

部分代码: // htmlparser抓取图片

	public static  String parserto(String contentString,String pathString,String httpurl)  {
		String  stringBuffer=null;
		Date date = new Date();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmssms");
		 
		try {
			List list = new ArrayList();
			Parser parser = Parser.createParser(contentString, "UTF-8");
				NodeList nodeList = parser
					.extractAllNodesThatMatch(new NodeFilter() {
						public boolean accept(Node node) {
							if (node instanceof ImageTag)// <img>标记
								return true;
							return false;
						}
					});
			if(nodeList.size()>0){
				for (int i = 0; i < nodeList.size(); i++) {
					String url = ((ImageTag) nodeList.elementAt(i)).getImageURL();
					url=StrUtils.htm2txt(url); 
					Random ran = new Random();
					int a =  ran.nextInt(1000);
					String imgname  = simpleDateFormat.format(new Date())+a+".jpg";
					String reurl = ((ImageTag) nodeList.elementAt(i)).getImageURL();
					contentString=contentString.replace(reurl, httpurl + imgname);
				 // 	pathString = "C:\\Documents and Settings\\Administrator\\桌面\\t\\";
					writeimg(url,pathString+imgname);
				}
			}
		} catch (Exception e) {
		}
		contentString.replaceAll("&nbsp;", "");
		return contentString;
	}
	//httpclient模拟器写图片,几乎所有格式的图片都可以,ftp方式的图片? http !
	public static void writeimg(String url,String targetPath) throws ClientProtocolException, IOException {
		HttpClient httpclient = new DefaultHttpClient();
		HttpGet httpget = new HttpGet(url);
		httpget.setHeader("referer", "http://www.baidu.com/");
		HttpResponse response = httpclient.execute(httpget);
		HttpEntity entity = response.getEntity();
		if (entity != null) {
			InputStream in = entity.getContent();
			int b = 0;
			FileOutputStream out = new FileOutputStream(new File(targetPath));
			while ((b = in.read()) != -1) {
				out.write(b);
			}
			out.close();
			in.close();
		}
		httpclient.getConnectionManager().shutdown();
	}

 

 

 

注意:htmlparser和httpclient需要添加相应的jar

 

 

 

 

 

 

分享到:
评论

相关推荐

    ASP.NET 上传图片到指定的图片服务器

    在本例中,我们关注的是如何利用 ASP.NET 实现从应用服务器向图片服务器异步上传图片的功能。这一过程涉及到两个主要服务器角色:应用服务器和图片服务器。 首先,我们会在图片服务器上创建一个 IIS 项目,这个项目...

    C# winform上传照片到服务器

    在C# WinForm应用开发中,上传照片到服务器是一个常见的需求,这涉及到客户端与服务器之间的文件传输技术。本文将深入探讨如何实现这个功能,以及如何根据要求修改照片的名字。 首先,我们需要了解C#中的文件操作...

    PB上传图片到服务器

    综上所述,`PB上传图片到服务器`涵盖的技术知识点广泛,包括客户端开发、服务器端处理、数据库操作、安全性以及用户体验等多个方面。在实际项目中,我们需要综合运用这些知识,以构建稳定、高效且安全的图片上传系统...

    unity通过http上传图片到服务器

    本文将详细讲解如何在Unity中利用HTTP请求上传图片到服务器,这里以Tomcat服务器为例。 首先,Unity提供了UnityWebRequest(UWR)类来处理HTTP请求,它是Unity 5.5版本后引入的,用于替换过时的WWW类。UWR支持异步...

    通过base64上传图片到服务器并读取图片

    本文将深入探讨如何通过Base64编码实现图片的上传至服务器以及从服务器读取图片的过程。 Base64是一种用于在网络上传输二进制数据的编码方式,它将原始的二进制数据转换为ASCII字符,以便于在只支持文本的环境中...

    上传图片到服务器

    标题提及的“上传图片到服务器”是指通过编程方式将用户的图片文件发送到远程服务器的过程。这通常涉及到客户端(如Web浏览器)与服务器之间的HTTP交互。描述中提到的问题可能是由于使用了过时或者不兼容的`...

    上传图片,可上传至服务器并且可以读取.rar

    本文将详细解析"上传图片,可上传至服务器并且可以读取.rar"这一主题,涵盖图片上传的流程、技术实现、服务器端处理以及安全考虑等多个方面。 1. 图片上传流程: 用户在前端界面选择本地图片后,通过HTTP或HTTPS...

    【JavaScript源代码】js实现上传图片到服务器.docx

    在JavaScript中实现图片上传到服务器的过程通常涉及到前端的文件选取、本地预览、Base64编码,以及与后端服务器的交互。以下是对这个过程的详细解析: 1. **前端文件选取**: - HTML部分提供了`...

    C# WinForm 上传图片 文件到服务器的方法

    ### C# WinForm 上传图片文件到服务器的方法 在C# WinForm开发中,上传文件尤其是图片文件到服务器是一项常见的需求。本文将详细介绍如何利用C#实现这一功能,并结合提供的部分代码示例进行深入解析。 #### 一、...

    iOS图片上传到服务器

    **一、使用NSURLSession上传图片** 1. **创建请求对象**: 使用`NSMutableURLRequest`创建一个POST请求,设置URL、HTTP方法("POST")以及Content-Type(一般设为"multipart/form-data",用于上传二进制数据)。 2. ...

    android上传图片+服务器接收图片

    本资源提供了一个完整的示例,涵盖了Android客户端如何上传图片以及服务器如何接收和处理这些图片的全过程。以下是关于这个过程的一些关键知识点: 1. **Android图片选择与预处理**: - 使用`Intent`调用系统图库...

    java上传图片至服务器并且返回下载URL

    总结来说,实现"java上传图片至服务器并且返回下载URL"的功能,主要涉及HTTP文件上传、文件存储、路径管理、响应处理和安全性控制等多个方面,结合Servlet、Spring等相关技术可以有效地完成这一任务。在开发过程中,...

    ASP+flash图片批量上传系统和一般的图片上传系统一样,都需要服务器组件的支持

    4. 权限控制:根据用户角色和权限,控制谁可以上传图片以及可以上传多少图片。 5. 存储优化:例如,使用数据库存储文件元数据,或者使用云存储服务来分发和管理大量图片。 在提供的文件列表中,`update.asp`可能是...

    java图片上传到服务器以及在服务器上图片修改删除

    java图片上传到服务器以及在服务器上图片修改删除,可以从前端获取图片后端接收然后保存,还可以修改图片修改之前会删除原来的图片。

    Java上传图片到服务器

    Java上传图片到服务器 对于图片处理有两种: 一种是插入数据库;一种是上传到服务器上。

    android上传图片至服务器

    综上所述,Android上传图片至服务器的过程涉及到客户端的图片获取、处理、请求创建和发送,以及服务器端的文件接收、保存和响应。在实际开发中,还需要关注安全性、性能优化和错误处理等方面,以提供稳定、高效的...

    winform 图片上传到服务器端 方法

    c/s 客户端PC上传到服务器上的源代码 可以参考参考 用的是webclient

    C# WinForm截取屏幕存为本地图片,然后上传图片至服务器

    C# WinForm源代码,可以实现定时截取当前屏幕,然后存为本地图片,再将其上传至远程服务器端,上传图片到服务器。也包含上传文件到服务器端的方法。通过Ftp协议上传,更改源代码中ftp中IP地址、用户名及密码即可使用...

    压缩图片上传服务器工具

    在IT行业中,图片压缩与上传服务器是一个常见的需求,特别是在网页设计、移动应用开发以及云存储等领域。"压缩图片上传服务器工具"就是针对这一需求而设计的解决方案,它可以帮助用户有效地减小图片文件大小,以便更...

Global site tag (gtag.js) - Google Analytics