Fileupload 上传
一般的上传下载相信大家都会得。最近做了一个txt文件的读取,原本简单的事情,结果想了一个下午,只因逻辑思维错误。
下面就跟大家说一下这个功能的实现以及利用fileupload上传文件的快速开发。
功能:按一定的规则读取一个txt文件里面的内容。
首先我们先到网上下载两个包:commons-fileupload-1.2.2.jar
commons-io-2.1.jar
有了这两个包之后我们就可以利用fileupload控件来上传文件到服务器了。
下面代码是上传代码【UploadUtil类】(通用代码,大家可以直接拷贝过去用)
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import https://www.sodocs.net/doc/6318368841.html,mons.fileupload.FileItem;
import https://www.sodocs.net/doc/6318368841.html,mons.fileupload.disk.DiskFileItemFactory; import https://www.sodocs.net/doc/6318368841.html,mons.fileupload.servlet.ServletFileUpload;
public class UploadUtil{
public static final long serialVersionUID =0L;
@SuppressWarnings("unchecked")
public static List
List
File targetFile = new File(request.getSession().getServletContext().getRealPath(targetF older));//获取向项目路径
File temFile = new File(request.getSession().getServletContext().getRealPath("/temp" ));//获取项目路劲临时目录
if(!targetFile.exists()){
targetFile.mkdirs();
}
if(!temFile.exists()){
temFile.mkdirs();
}
try{
if(ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(3000000);
factory.setRepository(temFile);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(3000000);
// Parse the request
List
Iterator
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
String fileName = item.getName();
if(!item.isFormField()){
if(fileName!=null&&!fileName.isEmpty()){
int dot = https://www.sodocs.net/doc/6318368841.html,stIndexOf(".");
fileName = fileName.substring(dot);
fileName = item.getFieldName()+"_"+rename()+fileName;
File uploadedFile = new File(targetFile,fileName);
item.write(uploadedFile);
files.add(uploadedFile.getAbsolutePath());
}
}
}
}
return files;
}catch(Exception e){
if(files!=null&&!files.isEmpty()){
for(String fileName:files){
File file = new File(fileName);
if(file.exists()){
file.delete();
}
}
}
e.printStackTrace();
return null;
}
}
/**
* 获取时间命名文档
* @return
*/
private static String rename(){
String name="";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date();
name=sdf.format(date);
name = name+Math.random()*10;
return name;
}
}
有了这个类之后我们是否就可以直接能上传文件了呢??
还不行,我们还要设置一下jsp页面。
下面是jsp页面的代码。可供大家测试参考用(其中form中enctype="multipart/form-data"必须要加上)。
OK,现在我们把jsp 也弄好了,我们看看我们要提交的的表单到那个类里面吧
在这里我用的servlet,from 表单直接提交给一个UploadDevice servlet类,
上面我们已经写好了上传的类了,那么我们在UploadDevice 就可以直接调用UploadUtil 了。
下面就是UploadDecice 类代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List
/**
* 读取文档
*/
String read;
FileReader fileread;
System.out.println(files.get(0));
File filename = new File(files.get(0));//读取txt文件try {
List
fileread = new FileReader(filename);
bufread = new BufferedReader(fileread);
try {
while ((read = bufread.readLine()) != null) {
String as = read.toString();
String[] aa = as.split(" ");//按tab来进行分析
bridgeList.add(aa);
}
if(null != bridgeList){
String message =
deviceManagerDao.addDeviceList(bridgeList);
System.out.println(message);
request.setAttribute("message", message);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if(filename.isFile() && filename.exists()){
filename.delete();
}
}
request.getRequestDispatcher("/device_add.jsp").forward(request, response);
}
OK 上传读取就这么简单了。希望对您有帮助。谢谢。
如果有什么不明白的可以加我QQ(1306351194)或者给我邮件:jsoksun2@https://www.sodocs.net/doc/6318368841.html,
必须用post。 * 2.表单上传需要使用类型为file的input * 3.enctype="multipart/form-data"只有文件上传时才用这个,用来指定表单编码的数据方式。让服务器知道我们要传递文件。 *并带有一些常规的信息。加在form里面和method一样。*三、php处理上传的数据 *$_POST提取post方法提交的的表单数据,如果是文件上传的数据则使用$_FILES接收文件,而$_POST接收 *非文件数据。所以当要上传文件时用两种方法接收数据。点击上传后只要将临时文件移动到目标文件夹中就成功了。 *array(size=4) 'shopname'=>string'得到'(length=6) 'shoppri'=>string'得到'(length=6) 'shopnum'=>string'得到'(length=6) 'sub'=>string'添加商品'(length=12) array(size=1) 'pic'=> array(size=5) 'name'=>string'11112907_124211588000_2[1].jpg' (length=30)
文件上传漏洞及解析漏洞总结 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。 文件上传后导致的常见安全问题一般有: 1)上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。 2)上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似); 3)上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。 4)上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本;等等。 要完成这个攻击,要满足以下几个条件: 首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。 其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。 最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。 一、从FCKEditor文件上传漏洞谈起 FCKEditor是一款非常流行的富文本编辑器,为了方便用户,它带有一个文件上传功能,但是这个功能却出过多次漏洞。 FCKEditor针对ASP/PHP/JSP等环境都有对应的版本,以PHP为例,其文件上传功能在:
php+html5实现无刷新上传、大文件分片上传、断点续传的方法理清思路: 引入了两个概念:块(block)和片(chunk)。每个块由一到多个片组成,而一个资源则由一到多个块组成。 块是服务端的永久数据存储单位,片则只在分片上传过程中作为临时存储的单位。服务端会以约一个月为单位周期性的清除上传后未被合并为块的数据片。实现过程: 将文件分割,分片上传,然后合并。 前端代码:
引用: https://www.sodocs.net/doc/6318368841.html,/yanghbmail/blog/item/6fc7beec9531e33462d09f2a.htm l kindEditor完整认识 PHP上调用并上传图片说明。 2011年02月03日星期四 20:26 最近又重新捣鼓了下kindeditor,之前写的一篇文章 https://www.sodocs.net/doc/6318368841.html,/yanghbmail/blog/item/c681be015755160b1d9583e7.htm l感觉有点不太全面细致,所以今天再重新写下。 此文所述KE版本为当前2011年2月3日 20:10:18最新版KindEditor 3.5.2 先看下目录结构 我使用的是PHP 所以黄色区域的文件夹是可以删除的。 重命名为:kindeditor 看下我的WWW目录:
这里的关键文件就是图中的两个其它我划掉的是我自己的文件夹 -----------------dome.php----------------------
这篇文章主要介绍了php实现上传图片保存到数据库的方法,可通过将图片保存在数据库实现多台服务器共享文件的功能,非常具有实用价值,需要的朋友可以参考下php实现上传图片保存到数据库的方法。分享给大家供大家参考。具体分析如下: php 上传图片,一般都使用move_uploaded_file方法保存在服务器上。但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外)如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间。 首先图片文件是二进制数据,所以需要把二进制数据保存在mysql数据库。 mysql数据库提供了BLOB类型用于存储大量数据,BLOB是一个二进制对象,能容纳不同大小的数据。 BLOB类型有以下四种,除存储的最大信息量不同外,其他都是一样的。可根据需要使用不同的类型。 TinyBlob 最大255B Blob 最大65K MediumBlob 最大16M LongBlob 最大4G 数据表photo,用于保存图片数据,结构如下: 代码如下: CREATE TABLE `photo` ( `id` int(10) unsigned NOT NULL auto_increment, `type` varchar(100) NOT NULL, `binarydata` mediumblob NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; upload_image_todb.php: 代码如下: <?php // 连接数据库 ","") or die(mysql_error()); @mysql_select_db('demo',$conn) or die(mysql_error()); // 判断action $action = isset($_REQUEST['action'])? $_REQUEST['action'] : ''; // 上传图片 if($action=='add'){ $image = mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name'])); $type = $_FILES['photo']['type']; $sqlstr = "insert into photo(type,binarydata) values('".$type."','".$image."')"; @mysql_query($sqlstr) or die(mysql_error()); header('location:upload_image_todb.php'); exit(); // 显示图片 }elseif($action=='show'){ $id = isset($_GET['id'])? intval($_GET['id']) : 0;
用php实现文件上传二法 -------------------------------------------------------------------------------- PHP(Hypertext Preprocessor)是一种HTML 内嵌式的语言(类似IIS 上的ASP)。而PHP 独特的语法混合了C、Java、Perl 以及PHP 式的新语法。它可以比CGI 或者Perl&nb sp;更快速的执行动态网页。除此之外,用PHP 写出来的Web 后端CGI 程序,可以很轻易的移植到不同的系统平台上。 我们在做网站时,需要访问者的参于才能将网站建设得更加引人注目,这就要求我们从访问者那里得到文章、图片等。因此,文件上传成为网页中必不可少的功能。现在我就利用现在流行的编程语言PHP,用两种方法来说明其功能的实现。 一、利用php的文件函数来实现上传 这段代码分为两个文件,一个为upload.html,一个是upload.php。 上传文件选择:upload.html 代码如下: --------------------------------------------------------------------------------
PHP多文件(图片)上传 总共三个文件conn.php index.php upload.php conn.php 文件 -------------------------------------------------------------------------------------------------------------- index.php 文件 --------------------------------------------------------------------------------------------------------------
上传文件 upload.php 文件code = $seccode; $code->width = 150; $code->height = 60; $code->background = 1; $code->adulterate = 1; $code->ttf = 1; $code->angle = 1; $code->color = 1; $code->size = 1; $code->shadow = 1; $code->animator = 0; $code->display(); $code->fontpath = ROOT_PATH.'/includes/captcha/fonts/'; $code->imagepath = ROOT_PATH.'/includes/captcha/'; 简单用法 include_once(ROOT_PATH.'/includes/cls.captcha.new.php'); $seccode = 'asdf'; $code = new Captcha(); $code->code = $seccode; $code->display(); */ class Captcha { var $code; //a-z 范围内随机 var $width = 150; //宽度 var $height = 60; //高度 var $background = 1; //随机图片背景 var $adulterate = 1; //随机背景图形
//上传文件类型列表 $uptypes=array('image/jpg', 'image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image /x-png'); $max_file_size=5000000; //上传文件大小限制, 单位BYTE $destination_folder="../image/userhead/"; //上传文件路径 $watermark=1; //是否附加水印(1为加水印,其他为不加水印); $watertype=1; //水印类型(1为文字,2为图片) $waterposition=1; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中); $waterstring="newphp.site.cz"; //水印字符串 $waterimg="xplore.gif"; //水印图片 $imgpreview=1; //是否生成预览图(1为生成,其他为不生成); $imgpreviewsize=1/2; //缩略图比例 ?>