jQuery:使用jQuery.form异步上传文件

是这样的……

最近遇到这样一个问题,在表单提交前,需要把文件传递到服务器,但是这时候问题就来了.表单ID还没有呢(存文档肯定要和表单ID关联啊),于是之前想了一个办法:

在iFrame中,每次上传完文件之后,将文件的信息带回到前台(文件信息不多,基本就是文件名,后台存储文件名,上传人,时间这些.),问题出现在上传了5个文件之后.因为之前一直都是可以直接运行.上传到第5个文件的时候,iFrame页面显示空白,后台没提示报错!!再次尝试,打开F12,看到了URL后面那一长串(预估计超过1000个字符)的参数,竟然每次都是用的GET方式……

上述情况发生后,只能想各种办法,之前大概想到的有如下几个:

  • 后台传回前台的数据,只保留部分重要的;
  • 改用POST方式(这里解释一下:后台传递完文件,需要跳转到list列表页面),但是这个方法完全不行;
  • 提前生成表单ID,这个更不靠谱.

经过了一个周末,终于想到了解决办法:Ajax上传(其实上周是想到过这个方法的,只是当时报错也就没怎么在意了).

异步上传

这个地方去下载:地址.

jQuery LOGO
image-2308

使用如下:




test





文件名操作



Java:选择更好的方式

现在去看三年前的问题

有个问题是这样的,统计一年每个月的销售量。看起来很简单,两个数组直接搞定?NO,这次是另外一种方式。

忽然想起刚接触Java的时候,想法就是上面的那样。很简单,粗暴,但是不易扩展,后期完全改不了。很久之后去看半年前写的程序,就会发现很多不认识。最近这种感觉太深切了,所以在一开始的时候,就想好怎么去做,怎么去完成。

好吧。上面都是废话。

最近一直在准备SSL的事情,但是很可惜,失败了。因为,因为,引用的站外资源太多了!!!

java标志
image-2306

问题总要解决

注意:最小Jdk版本为1.8

这是一个实体,定义了月份和金额,重写了toString()方法:


class Sales {

public Month getMonth() {
return month;
}

public void setMonth(Month month) {
this.month = month;
}

private Month month;

public double getSales() {
return sales;
}

public void setSales(double sales) {
this.sales = sales;
}

private double sales;

@Override
public String toString() {
return "month->" + getMonth() + ",sales->" + getSales();
}
}

下面是计算的部分,主要使用了Java 1.8里面stream的概念,这个东西特别方便,主要是方便在哪方面呢?主要在可以把集合都转换成stream(流)然后进行各项操作。


/**
* @author puruidong
* @version 2015-07-10
*/
public class Main {
private static final double monthlySales[] = new double[12];
private static final String[] monthArray = {"January", "February", "March", "April", "May",
"June", "July", "August", "September", "October",
"November", "December"};

private Set salesList = new HashSet(12);

public void totalSales() {

double count = salesList.stream().mapToDouble(new ToDoubleFunction() {
@Override
public double applyAsDouble(Sales value) {
return value.getSales();
}
}).sum();//通过stream的方式进行总和计算.
System.out.println("total->" + count);
}

static void averageSales() {

}

static void highestMonth() {

}

static void lowestMonth() {

}

public void showSales() {
salesList.forEach((x) -> {
System.out.println(x.toString());
});

}

public void getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(Scanner sc) {
int i = 0;
while (i <= 11) { System.out.println("Please enter a month to be recorded?(1-12)"); int months = sc.nextInt(); Sales sales = new Sales(); switch (Month.of(months)) {//Month是Java 1.8中新增的枚举类. case JANUARY: sales.setMonth(Month.JANUARY); break; case FEBRUARY: sales.setMonth(Month.FEBRUARY); break; case MARCH: sales.setMonth(Month.MARCH); break; case APRIL: sales.setMonth(Month.APRIL); break; case MAY: sales.setMonth(Month.MAY); break; case JUNE: sales.setMonth(Month.JUNE); break; case JULY: sales.setMonth(Month.JUNE); break; case AUGUST: sales.setMonth(Month.AUGUST); break; case SEPTEMBER: sales.setMonth(Month.SEPTEMBER); break; case OCTOBER: sales.setMonth(Month.OCTOBER); break; case NOVEMBER: sales.setMonth(Month.NOVEMBER); break; case DECEMBER: sales.setMonth(Month.DECEMBER); break; default: System.err.println("--input error--"); break; } if (sales.getMonth() != null) { sc.reset(); System.out.println("Please enter turnover:"); double turnover = sc.nextDouble(); sales.setSales(turnover); salesList.add(sales); } i++; } showSales(); System.out.println("----------------------------"); totalSales(); } public static void main(String[] args) { Scanner input = new Scanner(System.in); Main salesTracking = new Main(); salesTracking.getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(input); }//end main }//end class

看到这,快去更新Java 1.8吧.

此文成形于对一位网友的回复,原帖在此.