第一步:


搭环境,基本jdk 1.6+apache tomcat6.0+myeclipse2014
1.我们要清楚自己的jdk版本。因为我们Apache Tomcat配置的成功的前提是版本相对应。
安装jdk1.6是由于myeclipse中新建webproject时,有可能只有1.6和1.7两个选项,不过不同的myeclipse版本应该不同,如下图:

具体安装的jdk的过程和环境变量的设置就百度一下,教程很多,安装好了之后,查看一下版本,如下图:

2.安装apache tomcat6.0,推荐安装压缩版,下载之后直接解压缩,然后设置一下环境变量就可以用了。
解压缩都随便一个盘都行,下图是我的路径:

5.配置相关环境变量,由于本人之前已经配置了Java开发时环境,即JDK。因此JAVA_HOME就不必再配置了
1)环境变量1:CATALINA_HOME,环境变量值:F:\tomcat-6.0.35
(环境变量值即为相应ZIP文件解压目录)
2)环境变量2:CATALINA_BASE,环境变量值:F:\tomcat-6.0.35
(与CATALINA相同)
3)环境变量2:TOMCAT_HOME,环境变量值:F:\tomcat-6.0.35
(与CATALINA相同)
4)环境变量3:CALSSPATH,修改环境变量值,在其后加上:%CATALINA_HOME%libservlet-api.jar;
5)环境变量4:PATH,修改环境变量值,在其后加上:%CATALINA_HOME%libservlet-api.jar;
图片展示:

环境变量设置好了之后,需要修改一些tomcat的配置信息,路径:F:\tomcat-6.0.35\conf\server.xml如何跟下图一样的,可以不用修改:

上面的东西全部配置完成之后,可以启动一下tomcat,看是否配置成功,双击 F:\tomcat-6.0.35\bin目录下的startup.bat:

这样就显示配置成功了,然后我们可以访问一下tomcat自带的例子,打开浏览器输入localhost:80/index.html,80是端口号,可自行修改,如何没有修改过,则是8080,如下图所示:

3.安装myeclipse 2014,安装过程很简单,只分享一下安装包和破解包,破解包中自带破解教程,百度云链接https://pan.baidu.com/s/1c13JSdE 密码:3ji7

安装与破解完成之后,首先将myeclipse的编码格式改为UTF-8国际编码。
window->perferences 如图:

由于myeclipse不会自动导入你配置好的jdk,需要手动配置,因为没有什么特殊的,直接百度配置教程:http://jingyan.baidu.com/arti...

myeclipse中配置tomcat和如何启动的教程也比较多,也好找,链接:http://jingyan.baidu.com/arti...
这是我配置好了后

点击上图中圆圈圈起来的图标,启动你自己导入的tomcat,然后矩形框是用来将你创建的web project映射到F:\tomcat-6.0.35\webapps目录下

新建一个web project


...]

然后映射到webapps目录下:

然后开始写代码:
首先将index.jsp的编码格式设置为UTF-8

然后导入jsp-api.jar,这个包在

index.jsp中的主要代码为
form 中action的值为与后面建立的servlet/JSP mapping URL一致,可以先建立了servlet再来修改这个值。
${result}这个显示上传状态,与后面在SmartUpload.java中有定义。
showPreView(this)方法是用来预览图片的。

<form action="SmartUpload.do" enctype="multipart/form-data" method="post">
<input id="img" type="file" name="file1" accept="image/*" capture="camera" onchange="showPreview(this)" style="height: 130px; width: 460px; "><br/> <input type="submit" value="提交" style="height: 48px; width: 90px; "><br/>
<div id="preview"></div><br/>
${result}
</form>
</body>
<script type="text/javascript">
var fileList=document.getElementById("preview");
function showPreview(obj){
var files = obj.files,
img = new Image();
if(window.URL){
//File API
//alert(files[0].name + "," + files[0].size/(1024*1024) + "MB");
img.src = window.URL.createObjectURL(files[0]); //创建一个object URL,并不是你的本地路径
img.width = 200;
img.onload = function(e) {
window.URL.revokeObjectURL(this.src); //图片加载后,释放object URL
}
fileList.appendChild(img); }
else if(window.FileReader){
//opera不支持createObjectURL/revokeObjectURL方法。我们用FileReader对象来处理 var reader = new FileReader();
reader.readAsDataURL(files[0]);
reader.onload = function(e){
// alert(files[0].name + "," +e.total/(1024*1024) + "MB");
img.src = this.result;
img.width = 200;
fileList.appendChild(img); }
}
else{
//ie
obj.select();
obj.blur();
var nfile = document.selection.createRange().text;
document.selection.empty();
img.src = nfile;
img.width = 200;
img.onload=function(){
// alert(nfile+","+img.fileSize/(1024*1024) + "MB");
}
fileList.appendChild(img);
}
}
</script>

新建servlet

建立成功了之后,可以看到web.xml中的一些自动配置好的信息:

SmartUpload.java

package com.upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream; import java.io.RandomAccessFile;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class SmartUpload extends HttpServlet { // 定义允许上传的文件扩展名
private String Ext_Name = "gif,jpg,jpeg,png,bmp,swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb,doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2";
//显示上传文件的结果
private String result=null;
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req,resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取上传文件流
InputStream fileSource=req.getInputStream();
//设置临时文件名
String tempFileName="F:/tempFile";
File tempFile=new File(tempFileName);
//文件输出流,将上传的文件写入按字节流临时文件
FileOutputStream outputStream=new FileOutputStream(tempFile);
byte b[]=new byte[1024];
int n;
while((n=fileSource.read(b))!=-1){
outputStream.write(b,0,n);
}
outputStream.close();
fileSource.close();
//创建文件随机流,读取临时文件
RandomAccessFile randomFile=new RandomAccessFile(tempFile,"r");
//第一行的垃圾数据不需要
randomFile.readLine();
//在第二行中获取文件后缀名
String str=randomFile.readLine();
//获取文件后缀名
String fileExt=str.substring(str.indexOf(".")+1,str.lastIndexOf("\"")).toLowerCase();
// 检查扩展名
// 如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法
System.out.println("上传的文件的扩展名是:" + fileExt);
if(!Ext_Name.contains(fileExt)){
System.out.println("上传文件扩展名是不允许的扩展名:" + fileExt);
result = result + "上传文件扩展名是不允许的扩展名:" + fileExt + "<br/>";
randomFile.close();
RequestDispatcher dispatcher=req.getRequestDispatcher("index.jsp");
dispatcher.forward(req, resp);
return;
}
//得到保存文件的名字
String filename=makeFileName(fileExt); //重新定位文件指针到文件头
randomFile.seek(0);
long startPosition=0;
int i=1;
while((n=randomFile.readByte())!=-1&&i<=4){
if(n=='\n'){
startPosition=randomFile.getFilePointer();
i++;
}
}
//startPosition=startPosition-1; //获取文件内容结束位置
randomFile.seek(randomFile.length());
long endPosition=randomFile.getFilePointer(); int j=1;
while(endPosition>=0&&j<=2){
endPosition--;
randomFile.seek(endPosition);
if(randomFile.readByte()=='\n'){
j++;
}
}
endPosition=endPosition-1;
String savePath="F:/images";
File fileupload=new File(savePath);
if(!fileupload.exists()){
fileupload.mkdir();
}
//新建文件和文件名字
File saveFile=new File(savePath,filename);
RandomAccessFile randomAccessFile=new RandomAccessFile(saveFile,"rw");
//从临时文件的当中读取文件内容
randomFile.seek(startPosition);
while(startPosition<endPosition){
randomAccessFile.write(randomFile.readByte());
startPosition=randomFile.getFilePointer();
}
//关闭输入输出流,删除临时文件
randomAccessFile.close();
randomFile.close();
tempFile.delete();
req.setAttribute("result","上传成功"); RequestDispatcher dispatcher=req.getRequestDispatcher("index.jsp");
dispatcher.forward(req, resp); }
private String makeFileName(String fileExt) {
// 将文件名定义为年月日秒便于区分
Date nowDate=new Date();
SimpleDateFormat matter1=new SimpleDateFormat("yyyyMdHms");
String timePattern =matter1.format(nowDate);
System.out.println(timePattern);
return timePattern+ "."+fileExt; } }

上传图片的页面效果:

java Web开发实现手机拍照上传到服务器的更多相关文章

  1. Java web开发——文件夹的上传和下载

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  2. php实现手机拍照上传头像功能

    现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递, 这个另外一种数据格式传递,使用的是$GLOBALS ...

  3. 详细阐述Web开发中的图片上传问题

    Web开发中,图片上传是一种极其常见的功能.但是呢,每次做上传,都花费了不少时间. 一个"小功能"花费我这么多时间,真心不愉快. So,要得认真分析下原因. 1.在最初学习Java ...

  4. Java Web总结(二)-- 上传和下载

      在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接 ...

  5. iOS和小米手机拍照上传后,在web端显示旋转

    ( ′◔ ‸◔`)现在的公司啊都流行混合开发,我们公司也不例外,非要把交互非常多的社区模块用内嵌web页展示,好吧好吧,毕竟有的应用也是这么做的,那既然是社区就肯定少不了用户上传图片的操作,在开发阶段 ...

  6. Web开发安全之文件上传安全

    很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...

  7. JAVA WEB怎么实现大文件上传

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 改进后的代码不需要form标签,直 ...

  8. php web开发——文件夹的上传和下载

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  9. asp.net web开发——文件夹的上传和下载

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

随机推荐

  1. C#控制台窗口禁用关闭按钮

    1 public class Program 2 { 3 #region 禁用控制台黑窗口的关闭按钮 part1 4 5 private const int MF_BYCOMMAND = 0x0000 ...

  2. 以QT为例谈环境搭建

    以QT为例谈环境搭建 作者:哲思 时间:2022.1.5 邮箱:1464445232@qq.com GitHub:zhe-si (哲思) (github.com) 前言 自从实习结束,好久没写博客了. ...

  3. 【行业Tip】两化融合

    工业4.0 智能制造规划 两化融合是信息化和工业化的高层次的深度结合, 是指以信息化带动工业化.以工业化促进信息化,走新型工业化道路:两化融合的核心就是信息化支撑,追求可持续发展模式.

  4. Android 12(S) 图形显示系统 - BufferQueue的工作流程(八)

    题外话 最近总有一个感觉:在不断学习中,越发的感觉自己的无知,自己是不是要从"愚昧之巅"掉到"绝望之谷"了,哈哈哈 邓宁-克鲁格效应 一.前言 前面的文章中已经 ...

  5. 火狐firebug&firepath插件安装

    火狐浏览器下掉了firebug和firepath插件,用户即使下载了火狐55以下的版本,也无法查找到这两个插件,以下方法可以解决哦 第1步:下载火狐55以内版本安装包,安装时迅速设置禁止自动更新版本, ...

  6. Linux移植到自己的开发板(三)根文件系统

    @ 目录 1 Linux内核配置 2 ramdisk制作 3 busybox配置 4 genext2fs生成镜像 为了快速调试,采用ramdisk进行根文件系统测试.要使内核能挂载ramdisk根文件 ...

  7. J20航模遥控器开源项目系列教程(七)PPM输出 | 关于按键版本和旋转编码器版本的兼容说明、布局建议 | 关于MINI版PCB的兼容说明

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/J ...

  8. CF1479X Codeforces Round #700

    C Continuous City(图的构造) 题目大意:让你构造一个n\le 32的有向无环无重边图,使得从1走到n的所有路径长度在L,R之间,且每种长度的路径只有唯一一条,$L,R\le 1e6$ ...

  9. 如何在vscode中编写.net core 项目(vscode)

    1.下载拓展  .NET Core Extension Pack  (作者:保哥) 这个里面将需要的插件都打包了小白一键下载就好了 2.下载扩展   vscode-solution-explorer ...

  10. leetcode-3无重复字符的最长子串

    题目原题: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 ...