`

javaapplet js调用applet实现上传下载

    博客分类:
  • JAVA
阅读更多

js调用applet实现上传下载
1.上传的代码:

applet代码:

package applet;

import java.applet.Applet;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

//本地文件上传(与Servlet交互)
public class AppInt extends Applet { 

private String filePath;
private String fileName;
private String url;

private boolean bl=false;
public String getFilePath() {
  return filePath;
}

public void setFilePath(String filePath) {
  this.filePath = filePath;
  System.out.println(this.filePath);
}

public String getFileName() {
  return fileName;
}

public void setFileName(String fileName) {
  this.fileName = fileName;
  System.out.println(this.fileName);
}

public String getUrl() {
  return url;
}

public void setUrl(String url) {
  this.url = url;
  System.out.println(this.url);
}

public void setBl(){
  this.bl=true;
  System.out.println(this.bl);
  send();
}

public void init() {  
  if(this.bl){
  send();
  }


public void send() {
  {

  try {
  String filePath=getFilePath();
  String fileName =getFileName();  
  String urlstring=getUrl();

  System.out.println(filePath+"*****");
  //网络路径很重要
  URL url1 = new URL(urlstring+"?fileName="+URLEncoder.encode(fileName,"utf-8"));

  //打开打开SOCKET链接
   
  HttpURLConnection conn = (HttpURLConnection) url1
  .openConnection();
  conn.setRequestMethod("POST");
  conn.setAllowUserInteraction(true);
  conn.setDoInput(true);
  conn.setDoOutput(true);
  conn.setUseCaches(true);
  conn.setRequestProperty("Content-Type", "application/octet-stream");

  
  File jpgFile = new File(filePath);
  if (jpgFile.isFile()) {
  // 建立文件的输入流
  FileInputStream fileInputStream = null;
  fileInputStream = new FileInputStream(jpgFile);
  BufferedInputStream bis = new BufferedInputStream(
  fileInputStream);
  OutputStream os = conn.getOutputStream();
  BufferedOutputStream bos = new BufferedOutputStream(os);
  int len = 0;
  byte[] bty = new byte[4096];
  while ((len = bis.read(bty, 0, 4096)) != -1) {
  bos.write(bty, 0, len);
  bos.flush();

  }
  bos.close();
  bis.close();
  System.out.println(conn.getContentType() + ": "+ conn.getResponseCode());
  }
  } catch (Exception e) {
  e.printStackTrace();

  }

  }
}
}

对应的Servlet代码:

package servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.DB.DBconnect;

public class Receive extends HttpServlet {


public Receive() {
  super();
}


public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
}


public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

}


public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

  // PrintWriter out=response.getWriter();
  InputStream in = request.getInputStream();  
  //System.out.print("qqqq");

  
   
  String name=new String(request.getParameter("fileName").getBytes(),"utf-8");
   
  String nn=new String(name.getBytes("ISO8859-1"),"utf-8");
  System.out.println("文件名:"+name+"******"+nn);
   
  String tr=name.substring(name.lastIndexOf("."),name.length());
  
  // 根据时间得文件名
  Calendar calendar = Calendar.getInstance();
  String filename = String.valueOf(calendar.getTimeInMillis())
  +tr;
   
  System.out.println("服务器,文件名:"+name);
   
  File f = new File("C:\\imgrec\\"+filename); 
  String path="c:/imgrec/"+filename;
  FileOutputStream fos = new FileOutputStream(f);

  byte[] b = new byte[1024 * 1024]; 
  int bytes, sumBytes = 0;

  while (true) { 
  bytes = in.read(b); 
  if (bytes <= 0) 
  break; 
  sumBytes += bytes; 
  fos.write(b, 0, bytes); 
  } 
  fos.close(); 
  in.close(); 
   
   
  /*
  * 保存上传记录
  */
  DBconnect dao=new DBconnect();
  String sql="insert into fileList(fileName,filePath,name) values('"+filename+"','"+path+"','"+name+"')";
  dao.save(sql);
  dao.close();
   
  }


public void init() throws ServletException {
}

}

JSP页面:

<%@ page language="java" import="java.util.*,applet.GLAppInt" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
   
   
  <title>test.jsp</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">  
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>

<body >
<APPLET CODE = "applet.GLAppInt.class" archive="applet.jar" height="90%" MAYSCRIPT> 
<param name="path" value="E:\test\upload">
</APPLET> 
<script type="text/javascript">
function saveHtml(){
var filePath=document.applets[0].getAn();
var fileName=document.applets[0].getName();
//alert(fileName);
document.location="show.jsp?filePath="+filePath+"&fileName="+fileName;
}


</script>



</body>


</html>

//*************************

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <base href="<%=basePath%>">
   
  <title>My JSP 'show.jsp' starting page</title>
   
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">  
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body> 
   
   
  <%
  String url=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/appUpFile/servlet/Receive" ;
  String filePath=request.getParameter("filePath");
   
  if(filePath.length()>0){
  String fileName=request.getParameter("fileName");
  String[] fPath=filePath.split(",");
  String[] fName=fileName.split(",");
   
   
  %>
  <div>
  <APPLET CODE = "applet.AppInt.class" archive="ctr.jar" mayscript height="1" width="1">  
  </APPLET>
  <script type="text/javascript">
  function tsb(n){
  var fn=document.getElementById('fn'+n).value;
  var fp=document.getElementById('fp'+n).value;
  var ul='<%=url%>';
  document.applets[0].setFileName(fn);
  document.applets[0].setFilePath(fp);
  document.applets[0].setUrl(ul);
  document.applets[0].setBl();
  }
  </script>
  </div>
   
  <div align='center'>本地文件上传</div>
  <form action="">
  <table>
  <tr>
  <td>文件名</td>
  <td>路径</td>
  <td>上传</td>
  </tr>
  <%
  for(int i=0;i<fName.length;i++){
  String fp=new String(fPath[i].getBytes("ISO-8859-1"),"utf-8");
  String fn=new String(fName[i].getBytes("ISO-8859-1"),"utf-8");
   
  %>
  <tr>
  <td><input type="hidden" name="fn<%=i %>" id="fn<%=i %>" value="<%=fn %>"><%=fn %></td>
  <td><input type="hidden" name="fp<%=i %>" id="fp<%=i %>" value="<%=fp %>"><%=fp %></td>  
  <td><input type="button" name="sb" value="上传" onclick="tsb('<%=i %>')">
  </td>
  </tr>
  <%
  } 
  %>
  </table>
  </form>
<%
}
%>

</body>
</html>

数据库设计:

fileList表:有4个字段 id,fileName,filePath ,name

package com.DB;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class DBconnect {
public static Connection conn = null;

public DBconnect() {
  this.conn = getMySqlConnection();
}

public static Connection getMySqlConnection() {
  String url = null;
  try {
  Class.forName("com.mysql.jdbc.Driver");
  url = "jdbc:mysql://localhost:3306/listenle?useUnicode=true&characterEncoding=UTF-8";
  conn = DriverManager.getConnection(url, "root", "rufeng8848");
  } catch (Exception e) {
  e.printStackTrace();
  }
  return conn;
}

/*
* 插入表fileList 给每一次上传的文件做好记录
* 记录上传
*/
public void save(String sql){
  Statement st=null;
  
  try {
  st=conn.createStatement();
  st.execute(sql);
  } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
}
/*
* 取出fileList表中 文件名,路径 
* 便于下载
* 返回类型为
*/
public ResultSet findAll(){
  ResultSet rs=null;
  Statement st=null;
  String sql="select * from fileList";
  try {
  st=conn.createStatement();
  rs=st.executeQuery(sql);
  } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
  return rs;
}
/*
* 关闭链接
*/
public void close() {
  try {
  conn.close();
  } catch (SQLException e) {
  e.printStackTrace();
  System.out.println("关闭异常");
  }
}
}
这样就可以上传了。

经过测试发现,JS调用applet报java.security.accesscontrolexception异常。

原来是安全机制的问题。在客户端修改一下java的安全机制就可以了。

  总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。以及把文件转换成流或把流转换成文件的操作。
 

分享到:
评论

相关推荐

    Java applet调用c++ SSO登录javascript脚本开发教程

    Java applet调用c++ SSO登录javascript脚本开发教程

    关于 js 和 applet 相互调用的例子

    NULL 博文链接:https://peeply.iteye.com/blog/754029

    js 动态调用 applet 内的方法示例程序

    本资源是博客《js 动态调用 applet 内的方法》一文示例程序,博客地址:http://blog.csdn.net/defonds/archive/2011/03/23/6270498.aspx。 以下步骤、命令行全都在 jsCallApplet 目录下进行。 步骤一:将 FileApplet...

    js与applet相互调用的方法

    主要介绍了js与applet相互调用的方法,结合实例形式分析了js调用java的applet以及java调用js的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Applet实现的ckeditor粘贴word图片且图片自动上传

    插件使用JAVA APPLET技术开发,需要配合JavaScript使用,可以将网页中含有的本地图片(src为'file:///')自动上传到服务器并修改img标签的src属性为新的图片地址。典型应用场景如:配合ckEditor使用,使从WORD粘贴...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    JS实现截屏

    用的是百度的JS版API,由于百度API未提供截屏功能,便自己动手写,用网页调用APPLET方式实现。附代码,提供JSP和HTML两个版本。亲测可用,觉得有用的请顶! PS: 1、保证D盘有个img目录或者自己修改代码自动创建...

    java开源包1

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java开源包10

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包4

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    JAVA实现改变客户端分辨率(javascript+C+JNI+APPLET+数字签证)

    用于客户需要登录此系统使用固定分辨率,退出系统恢复正常,所以就考虑到用java调用C程序写的控制系统改变分辨率底层代码,通过这个例子,也可以自己实现Java调用C控制系统所有的底层代码,所以希望通过这个例子可以给你...

    java开源包3

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包11

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包6

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包9

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    脚本化Java

    另外,一些JavaScript解释器(如绑定到Java6的JavaScript解释器)支持一个功能集,该功能集允许JavaScript和Java对象交互、设置和查询字符以及调用方法。 本章首先介绍如何把JavaScript解释器嵌入到一个Java6应用...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java开源包5

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

Global site tag (gtag.js) - Google Analytics