导读:昨晚恶补了一些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表单,顺便提交一些参数信息。不过,这都是明儿个的事儿了。

[Nginx 2] form表单提交,图片上传的更多相关文章

  1. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  2. Ajax提交Form表单及文件上传

    刚刚申请下来的博客,写得第一篇.有点小激动,本人以前是一名工业3D设计师突然有些变故做上了JavaWeb开发: 前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Fo ...

  3. Django的form表单之文件上传

    在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...

  4. $_FILES参数详解及简单<form>表单无刷新上传文件

    $_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...

  5. php+form表单的文件上传

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 传统表单提交文件上传,以及FormData异步ajax上传文件

    传统的文件上传: 只用将form表单的entype修改成multipart/form-data,然后就可以进行文件上传,这种方式常用并且简单. 以下是另一种方式FormData,有时候我们需要ajax ...

  7. java模拟post方式提交表单实现图片上传【转】

     转自:http://blog.csdn.net/5iasp/article/details/8669644 模拟表单html如下:   <form action="up_result ...

  8. 2020最新Servlet+form表单实现文件上传(图片)

    servlet实现文件上传接受 这几天学了一点文件上传,有很多不会,在网查了许多博客,但是最新的没有,都比较久了 因为我是小白,版本更新了,以前的方法自己费了好久才弄懂,写个随笔方便以后查找 代码奉上 ...

  9. AJAX 表单提交 文件上传

    1. AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载 ...

随机推荐

  1. Exception error message with incorrect line number

    In Release mode the number in front of the exception is NOT the line of code. Instead it's an offset ...

  2. Linux 下 MySQL 的彻底卸载和安装配置字符集

    前言: Linux环境下MySQL的安装和配置在网上已经有很多教程了.之所以写这篇文章是因为在配置字符集的时候找了网上的一些教程发现并不能用导致折腾了一阵子.下面的教程均是亲自实践. MySQL的彻底 ...

  3. Java的clone机制(及String的特殊性)

    1. Clone&Copy 假设现在有一个Employee对象,Employee tobby =new Employee(“CMTobby”,5000),通常我们会有这样的赋值Employee ...

  4. mysql小问题

    报错信息如下: 主要是因为用root用户登录查询其他用户的表,结果这个用户不存在了,所以导致没有权限.临时解决办法,给root赋所有权限: grant all privileges on *.* to ...

  5. vs2012出现无法启动iis express web 服务器的错误

    一直用的好好的,今天调试时却总报上面的错误.“文件查看器”->"windows 日志"->"系统"里发现有几条“HttpEvent”错误, 具体信息 ...

  6. c语言知识(1)

    用freopen重定向输入 freopen函数以指定模式重新指定到另一个文件,模式用于指定新文件的访问方式. FILE *freopen(const char * restrict filename, ...

  7. frame动画

    <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android=&q ...

  8. GCD信号量并发控制

    /** *  当我们在处理一系列线程的时候,当数量达到一定量,在以前我们可能会选择使用NSOperationQueue来处理并发控制,但如何在GCD中快速的控制并发呢?答案就是dispatch_sem ...

  9. RBStoryboardLink库的使用注意事项 -转载至--坤哥MartinLi博客

    RBStoryboardLink库的使用注意事项 demo下载:https://github.com/MartinLi841538513/RBStoryboardLinkDemo 操作步骤: 1,引入 ...

  10. 异步task处理

    public async Task<Customers> GetCustomers() { return await Service.GetCustomersAsync(); } publ ...