zoukankan      html  css  js  c++  java
  • [Nginx 2] form表单提交,图片上传

    导读:昨晚恶补了一些Nginx服务器的东西,从整体上对Nginx有一个初步的了解。上午去找师哥问了问目前项目中的使用情况,然后就开始上传图片了。这里就简单总结整理一下今天的成果,以后接着提升。简单粗暴,直接上代码,呃,不多说,这本就是为了自己以后可以复制+粘贴的。


    一、HTML页的操作

    <span style="font-family:KaiTi_GB2312;font-size:18px;"><form id="form1" action="courseRotation/uploadFile" method="post" enctype="multipart/form-data">
    	<input type="file" id="file" name="file"></input> 
    	<input type="submit" id="btn" value="上传"> <br> <input
    	type="button" onclick="loadPic()" id="btn" value="预览">
    	<input id="courseIdT" type="hidden" name="courseId"/>
    </form></span>


    注意事项:使用form表单上传文件时,一定要注意先后顺序,file最好放在最上边,以此例来说,如果将courseID放在最上面,结果会很无语。不信就试试。。。。


    二、controller代码

    <span style="font-family:KaiTi_GB2312;font-size:18px;">	public void uploadFile() {
    		
    		Calendar date = Calendar.getInstance(); // 以图片类别+日期规划图片文件夹层级
    		int year=date.get(Calendar.YEAR);
    		int month=date.get(Calendar.MONTH);
    		int day=date.get(Calendar.DAY_OF_MONTH);
    		String time=String.valueOf(year)+String.valueOf(month)+String.valueOf(day);
    		
    		String picFile= UUID.randomUUID().toString();
    		UploadFile files = getFile(getPara("file"), picFile);//上传至本地服务器
    		UploadFile file=getFile();
    		String courseId = getPara("courseId");
    		
    		String picName = picFile+ ".jpg";// 自定义图片名,也能防止汉字的干扰
    		String fileName = "/" + file.getFileName();
    		String imageType="courseRotation";
    		String uploadServicePath = "abc/" + imageType + "/"+time+"/"+ picName; // 上传到服务器的路径
    		
    		PictureMange.uploadImage(imageType,uploadServicePath,fileName,time,picFile);
    		
    	}</span>


    注意事项:在获取参数值的时候,也有一个先后顺序问题,今天刚开始做的时候,我将courseID的获取放在了最上边,结果就是死活都是null值,打开调试,人家明明就是有值的。然后将其放在了file参数的下边,哈哈哈哈哈。。。。。。


    三、PictureMange图片上传类


    说明:因为这个Nginx是在Linux上搭的,然后再window上的调试有点困难,所以为了保证方法的执行,在控制台上打印了一些数据。

    <span style="font-family:KaiTi_GB2312;font-size:18px;">public static void uploadImage(String imageType,String uploadServicePath,String fileName,String createTime,String picFile) {
    		
    		boolean flag=false;//标记此方法能否正常执行完毕
    		
    		System.out.println("jrkjManage------>>>>>>uploadFile");
    		String serverPath = "d:/fileUpload/";
    		//System.out.println(folderName);
    		//UploadFile files = getFile(getPara("file"), folderName);
    		
    		File imagefile = new File(serverPath + picFile + fileName);
    		System.out.println("开始上传文件到nginx");
    		
    		FTPClient ftpClient = new FTPClient();
    		ftpClient.setControlEncoding("GBK");
    		String hostname = "123.56.120.25"; // FTP服务器主机ip
    		int port = 21;// FTP服务器端口,默认就是21
    		String username = "apple"; // FTP服务器用户名(可以有多个)
    		String password = "apple123";// FTP服务器密码
    		System.out.println("初始化参数");
    		try {
    			// 链接ftp服务器
    			ftpClient.connect(hostname, port);
    			System.out.println("FPT服务器连接成功");
    			// 登录ftp
    			ftpClient.login(username, password);
    			System.out.println("nginx服务器登录成功!");
    			int reply = ftpClient.getReplyCode(); // ftp服务状态码
    			System.out.println("nginx服务器状态(230为成功):" + reply);
    			// 如果reply返回230就算成功了,如果返回530密码用户名错误或当前用户无权限。
    			System.out.println("!FTPReply.isPositiveCompletion(reply):"
    					+ !FTPReply.isPositiveCompletion(reply));
    			if (!FTPReply.isPositiveCompletion(reply)) {
    				ftpClient.disconnect();
    				System.out.println("nginx服务器状态错误!");
    				return;
    			}
    			System.out.println("初始化nginx路径");
    			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    			System.out.println("uploadServicePath:" + uploadServicePath);
    			// 在nginx上创建文件夹,一次只能创建一级,所以建多级要分多次
    			ftpClient.makeDirectory("abc");// 什么的都不写的情况下,默认在root目录下创建文件夹,此处在nginx/apple/uploadImage
    			ftpClient.makeDirectory("abc/" + imageType);// 在root目录下创建文件夹
    			ftpClient.makeDirectory("abc/" + imageType + "/" + createTime);// 在root目录下创建文件夹
    			System.out.println("目录创建成功!");
    
    			InputStream input = new FileInputStream(imagefile);
    			System.out.println("创建输入流成功!");
    			ftpClient.storeFile(uploadServicePath, input);// 文件你若是不指定就会上传到root目录下
    			System.out.println("文件上传成功!");
    			input.close();
    			System.out.println("关闭文件输入流!");
    			ftpClient.logout();
    			System.out.println("退出nginx服务器!");
    		} catch (SocketException e) {
    			System.out.println("SocketException(socket协议出错:):" + e.getMessage());
    		} catch (IOException e) {
    			System.out.println("IOException:(IO异常):" + e.getMessage());
    		} finally {
    			System.out.println("关闭nginx连接----》》开始");
    			if (ftpClient.isConnected()) {
    				try {
    					ftpClient.disconnect();
    					System.out.println("关闭FTP服务器");
    				} catch (IOException ioe) {
    					System.out.println("FTP服务器关闭异常");
    				}
    			}
    			System.out.println("关闭nginx连接----》》结束");
    		}
    
    		flag=true;//标记上传过程中没有问题
    	}</span>

    四、JFinal引导配置(路径)

    <span style="font-family:KaiTi_GB2312;font-size:18px;">	public void configConstant(Constants me) {
    		// 加载少量必要配置,随后可用PropKit.get(...)获取值
    		PropKit.use("a_little_config.txt");
    		me.setEncoding("utf-8");
    		me.setDevMode(PropKit.getBoolean("devMode", false));
    		//String fileUploadPath = "/usr/local/uploadPicture";图片:发布服务器的时候,使用这一行代码
    		String fileUploadPath = "d:/fileUpload";//本地调试使用
    		me.setBaseUploadPath(fileUploadPath);
    	}</span>

    五、总结

    刚开始是实现了一个页面的图片上传,然后所有的参数都在一起,写了好多。但是在项目中又有多个地方用到,我最开始想着省事,使用复制+粘贴+修改,唉,后来统计了一下实在是太多,就想着将方法抽象出来,结果这一抽,时间就过去了。但是,我觉得这个抽象是有意义的,以后就可以进行复用了。

    今天做到了另外一个页面,业务的逻辑需求不同,发现这个方法不适用,还得在前台使用Js提交form表单,顺便提交一些参数信息。不过,这都是明儿个的事儿了。



  • 相关阅读:
    005. gitlab安装
    004. github使用
    003. git标签
    TS标红和报错解决(优化项)
    catalog连接数据库与sde权限问题
    博客新生企划
    HDU 7105 Power Sum
    HDU 7131 Nun Heh Heh Aaaaaaaaaaa
    BZOJ 1691 挑剔的美食家
    洛谷 4254 Blue Mary 开公司
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010346.html
Copyright © 2011-2022 走看看