从0开始做安卓/IOS拍照摄像上传APP【app+后台】【工具 eclipse+Hbuilder】

项目源码:http://download.csdn.net/detail/jintaohahahaha/9875748

一、搭建开发环境

在你的电脑上安装  eclipse  hbuilder   jdk  tomcat   ,这些步骤不再细说

二、打开Hbuilder

三、新建Demo项目


最后点击完成。

三、新建APP项目

这次新建的是我们的APP


四、我们可以看到,我们Hbuilder项目管理器中有两个项目

其中MyAPP是我们的项目,HELLO5+只是用来复制代码的Demo项目

五、运行HELLO5+项目

手机与电脑通过USB连接,开启USB调试模式

运行结果如下

在其中我们可以找到

我们的demo就依赖这两个原型来做。

六、拍照录像功能实现

(一)HELLO5+拍照录像页面在  plus/camera.html中,我们将其复制,重命名为index.html并且替换MyAPP中的index.html

(二)打开MyAPP中的index.html,发现其中js和css在html中有冗余,将其分别剥离为index.js和index.css,并分别放入js和css文件夹下,再在index.html中引入

(三)观察index.html我们还发现她分别引了一个外部的js和css

我们在HELLO5+中找到并将他们分别拷贝至MyAPP的js和css文件夹下,并且改变index.html中的引用路径

(四)这时候我们可以测试拍照和录像功能,但是你会发现,点击拍照和录像记录无法预览

            这是因为我们还没有引入图片和视频预览的页面,找到,复制到我们MyAPP中。修改其中引用的js路径。

(五)再修改index.js预览方法中的路径

(六)至此,拍照录像功能完成

七、上传功能实现

(一)我们使用的是UPLODER实现的上传功能

            通过查看HELLO5+项目plus/uploader.html中代码可知

            她在js中定义了一个数组存文件

(二)我们将index.js进行改造,让其在每次拍照、摄像后也将文件存在数组中,以便后需上传

             在index.js顶部定义一个var files=[];

             新建函数,和变量index       

// 添加文件
var index=1;
function appendFile(p){
	var n=p.substr(p.lastIndexOf('/')+1);
	files.push({name:"uploadkey"+index,path:p});
	index++;
}
在拍照和录像成功后调用appendFile(p)方法


  (三)加入上传按钮

在index.html中加入上传按钮

在index.js中添加其相应方法

var serverUploadUrl = "http://192.168.1.100:8080/upLoadPhoto/upload";//到时候修改为你们服务器相应的地址
// 上传文件
function upload(){
	if(files.length<=0){
		plus.nativeUI.alert("没有添加上传文件!");
		return;
	}
	outSet("开始上传:")
	var wt=plus.nativeUI.showWaiting();
	var task=plus.uploader.createUpload(serverUploadUrl,
		{method:"POST"},
		function(t,status){ //上传完成
			if(status==200){
				outLine("上传成功:"+t.responseText);
				plus.storage.setItem("uploader",t.responseText);
				wt.close();
				w.addEventListener("loaded",function(){
					wt.close();
					w.show("slide-in-right",300);
				},false);
			}else{
				outLine("上传失败:"+status);
				wt.close();
			}
		}
	);
	task.addData("client","HelloH5+");
	task.addData("uid",getUid());
	for(var i=0;i<files.length;i++){
		var f=files[i];
		task.addFile(f.path,{key:f.name});
	}
	task.start();
}

// 产生一个随机数
function getUid(){
    return Math.floor(Math.random()*100000000+10000000).toString();
}

(四)在function cleanHistory()方法最后添加files = [];

至此,APP开发完成,快运行试试吧,只是不能上传,别急,我们现在就开始实现上传。

=====================================================前后台分割线==========================================================

后台开发

八、打开myeclipse、新建web项目

九、引入jar包

十、新建一个servlet

十一、servlet代码如下

package com.upLoadPhoto;

import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUpload extends HttpServlet {
    /**
	 * 
	 */
	private static final long serialVersionUID = 8788625573740741280L;

	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        fileControl(req, resp);
    }
	
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        fileControl(req, resp);
    }

    /**
     * 上传文件的处理
     */
    private void fileControl(HttpServletRequest request, HttpServletResponse response) throws ServletException , ServletException, IOException {
    	 // 上传文件目录
        String uploadDir = this.getServletContext().getRealPath("/uploadFile");
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 设置内存区块大小4KB
        factory.setSizeThreshold(4 * 1024);
        // 设置暂存容器,当上传文件大于设置的内存块大小时,用暂存容器做中转
        factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        fileUpload.setSizeMax(1024 * 1024 * 100);
        //fileUpload.setFileSizeMax(1024 * 1024 * 10);
        List<FileItem> fileItemList = null;

        try {
            fileItemList = fileUpload.parseRequest(request);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Iterator<FileItem> fileItemIterator = fileItemList.iterator();
        FileItem fileItem = null;
        while (fileItemIterator.hasNext()) {
            fileItem = fileItemIterator.next();
            // 普通文件框上传
            if (fileItem.isFormField()) {
                String filedName = fileItem.getFieldName();
                String filedValue = fileItem.getString("GBK");// 编码格式
                System.out.println(filedName);// 文件框名称
                System.out.println(filedValue);// 文件的值
            } else {
                String filedName = fileItem.getFieldName();// 文件上传框的名称
                // 获取文件上传的文件名
                String OriginalFileName = takeOutFileName(fileItem.getName());
                System.out.println("原始文件名:"+OriginalFileName);
                if (!"".equals(OriginalFileName)) {
                    // 根据上传的文件名重新命名
                    String newFileName = getNewFileName(OriginalFileName);
                    System.out.println("重新名:"+newFileName);
                    File writeToFile = new File(uploadDir + File.separator + newFileName);
                    try {
                        fileItem.write(writeToFile);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    private String takeOutFileName(String filePath) {
        String fileName = filePath;
        if (null != filePath && !"".equals(filePath)) {
            int port = filePath.lastIndexOf("\\");
            if(port != -1){
                fileName = filePath.substring(port+1);
            }
        }
        return fileName;
    }

    private String getNewFileName(String originalFileName) {
        StringBuffer newFileName = new StringBuffer();
        if (null != originalFileName && !"".equals(originalFileName)) {
            int port = originalFileName.lastIndexOf(".");
            String type = "";
            String fileName = "";
            if (port != -1) {
                type = originalFileName.substring(port + 1);
                fileName = originalFileName.substring(0, port);
            } else {
                fileName = originalFileName;
            }
            StringBuffer suffix = new StringBuffer("_");
            suffix.append(Calendar.getInstance().getTimeInMillis());
            suffix.append("_");
            suffix.append(new Random().nextInt(100));
            newFileName.append(fileName);
            newFileName.append(suffix);
            newFileName.append(".");
            newFileName.append(type);
        }
        return newFileName.toString();
    }
}

十二、不要忘了servlet需要在web.xml中配置哦

十三、最后将MyAPP中index.js中serverUploadUrl修改为你刚刚servlet的路径即可

十四、保证手机和后台在一个局域网中,赶快测试一下吧。


项目源码:http://download.csdn.net/detail/jintaohahahaha/9875748

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值