导读:昨晚恶补了一些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. XAMPP Error: Apache shutdown unexpectedly. 解决思路

    我建议首先 运行在cmd中运行 (安装目录)apache/bin/httpd.exe 之后就很好确定错误的具体原因了,而不是根据下面的那样猜端口,比如我遇到的问题,就是配置的路径不存在导致的. 参考资 ...

  2. codeforces 55D - Beautiful numbers(数位DP+离散化)

    D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  3. CF 274B Zero Tree 树形DP

    A tree is a graph with n vertices and exactly n - 1 edges; this graph should meet the following cond ...

  4. HDU 2196 Computer 树形DP 经典题

    给出一棵树,边有权值,求出离每一个节点最远的点的距离 树形DP,经典题 本来这道题是无根树,可以随意选择root, 但是根据输入数据的方式,选择root=1明显可以方便很多. 我们先把边权转化为点权, ...

  5. D触发器

    普通的电路,以及常规的逻辑门都有一个共性,那就是输出直接依赖于输入,当输入消失的时候,输入也跟着不存在了.触发器不同,当它触发的时候,输出会发生变化.但是,当输入撤销之后,输出依然能够维持. 这就是说 ...

  6. 发现木马C:\windows\system32\FastUserSwitchingCompatibilityex.dll

    而且用安全狗还隔离不了

  7. 图片--Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  8. Java注解教程及自定义注解

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  9. SPREAD_NET6

    SPREAD_NET6 下载地址 http://www.gcpowertools.com.cn/downloads/trial/Spread.NET/EN_SPREAD_NET6_SETUP_RA_6 ...

  10. rails中两种回滚-reversible和revert区别

    1 通常迁移内容写在change方法中 ,但是有些迁移内容不能自动通过执行rake:rollback回滚, 所以在迁移文件里要使用 reversible 方法,告诉rails如何回滚例如下面 # co ...