java实现利用HTTP基于servlet上传文件至服务器
Java客户端程序fileupload.java
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import https://www.360docs.net/doc/c9102474.html,.HttpURLConnection;
import https://www.360docs.net/doc/c9102474.html,.URL;
public class fileupload {
public static String upload(String actionUrl,String FileName)throws IOException{
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
URL uri = new URL(actionUrl);
HttpURLConnection conn = (HttpURLConnection) uri.openConnection();// 设置从主机读取数据超时
conn.setReadTimeout(10 * 1000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
DataOutputStream outStream = new DataOutputStream(
conn.getOutputStream());
if (FileName != null) {
// 构建发送字符串数据
StringBuilder sb1 = new StringBuilder();
sb1.append(PREFFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
+ FileName + "\"" + LINEND);
sb1.append("Content-Type: application/octet-stream;chartset="
+ CHARSET + LINEND);
sb1.append(LINEND);
// 写入到输出流中
outStream.write(sb1.toString().getBytes());
// 将文件读入输入流中
InputStream is = new FileInputStream(FileName);
byte[] buffer = new byte[1024];
int len = 0;
// 写入输出流
while ((len = is.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
is.close();
// 添加换行标志
outStream.write(LINEND.getBytes());
}
// 请求结束标志
byte[] end_data = (PREFFIX + BOUNDARY + PREFFIX + LINEND).getBytes();
outStream.write(end_data);
// 刷新发送数据
outStream.flush();
// 得到响应码
int res = conn.getResponseCode();
//System.out.println(res);
InputStream in = null;
// 上传成功返回200
if (res == 200) {
in = conn.getInputStream();
int ch;
StringBuilder sb2 = new StringBuilder();
// 保存数据
while ((ch = in.read()) != -1) {
sb2.append((char) ch);
}
}
// 如果数据不为空,则以字符串方式返回数据,否则返回null
return in == null ? null : in.toString();
}
}
在web.xml中配置Servlet
服务器端程序Fileupload.java
package umb.load;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import https://www.360docs.net/doc/c9102474.html,mons.fileupload.FileItem;
import https://www.360docs.net/doc/c9102474.html,mons.fileupload.FileItemFactory;
import https://www.360docs.net/doc/c9102474.html,mons.fileupload.disk.DiskFileItemFactory;
import https://www.360docs.net/doc/c9102474.html,mons.fileupload.servlet.ServletFileUpload;
@SuppressWarnings("serial")
public class Fileupload extends HttpServlet{
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException{
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
@SuppressWarnings("rawtypes")
Iterator items;
try {
items = upload.parseRequest(request).iterator();
while (items.hasNext()) {
FileItem item = (FileItem) items.next();
if (!item.isFormField()) {
//取出上传文件的文件名称
String name = item.getName();
//System.out.println(name);
String fileName =
name.substring(https://www.360docs.net/doc/c9102474.html,stIndexOf('\\')+1,name.length());
//System.out.println(fileName);
String path =
request.getRealPath("upload")+File.separatorChar+fileName;
//上传文件
File uploadedFile = new File(path);
item.write(uploadedFile);
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
//System.out.println(path);
out.print("上传的文件为:"+name+"
");
out.print("保存的地址为:"+path+"");
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
eoLinker-API_Shop_猫咪大全_API接口_Java调用示例代码
eoLinker-API Shop 猫咪大全 Java调用示例代码 猫咪大全 可查询猫咪相关信息,包括品种介绍、产地、性格、寿命、价格等信息,带图片。 该产品拥有以下APIs: 1.关键字获取猫类 2.获取猫类列表 3.获取猫类详细信息 注意,该示例代码仅适用于https://www.360docs.net/doc/c9102474.html,网站下API使用该产品前,您需要通过https://https://www.360docs.net/doc/c9102474.html,/#/api/detail/?productID=193申请API服务 1.关键字获取猫类 package net.apishop.www.controller; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/c9102474.html,.HttpURLConnection; import https://www.360docs.net/doc/c9102474.html,.MalformedURLException; import https://www.360docs.net/doc/c9102474.html,.URL; import https://www.360docs.net/doc/c9102474.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; /** * httpUrlConnection访问远程接口工具 */ public class Api { /** * 方法体说明:向远程接口发起请求,返回字节流类型结果 * param url 接口地址 * param requestMethod 请求方式 * param params 传递参数重点:参数值需要用Base64进行转码 * return InputStream 返回结果 */ public static InputStream httpRequestToStream(String url, String re questMethod, Map
内部文件传输管理方案
内部文件传输管理方案 一:目前情况: 目前内部没有文件服务器,工作人员资料均存储在本地电脑上,无法实现重要资料的备份及资料的共享。重要数据的保存存在比较大的隐患。一但系统瘫痪或病毒爆发,极有可能使重要数据丢失而造成重大的损失。同时,在对资料的共享及管理方面造成难以管理的情况。无法有效的实现资料的共享使用及数据的安全。基于以上种种情况,建议架设内部文件服务器。 文件服务器的作用:一,数据备份,确保数据安全。造成数据掉失的主要有以下原因:1,物理故障2,人为误操3,软件问题4,病毒木马及黑客5,机器掉失及被盗6,工作人员恶意破坏7,自然灭害。由此可见数据时刻存在风险,也可以明白数据备份的重要性。二,数据实时共享,提高工作人员工作效率。在企业里,数据共享就如人体的血液,数据能否迅速共享有着重要。三,迅速从事故中恢复正常状态。由于数据掉失或系统瘫痪等原因至使破坏工作人员正常工作的环境,在这情况下迅速恢复工作人员正常工作环境尽量缩短恢复正常状态的时间显得特别重要。例如:工作人员系统瘫痪,重做系统及安装应用程序等会化费大量的时间,但利用服务器及软件的配合可以在十几分钟内让工作人员的恢复到正常环境,而不影响工作。四,减少U盘使用,从源头防止病毒交叉感染。建立文件服务器后,可以改变以往通过U盘传输交换文件的方式,从而避免病毒交叉感染的
风险。 二:软硬件需求: 1.由于服务器是运行关键应用及确保数据安全的设备,所以服务器的稳定,性能,及服务特别重要。服务器必须能够7*24不间断服务,服务器要有足够的性能去运行应用以及服务器必须在故障时能迅速恢复过来。它采用专利的三大内存保护技术、RAID 技术、热插拔技术、冗余电源、冗余风扇等方法使服务器具备容错能力、安全保护能力。2 软件需求:windows server 2003或Windows server2008 一套。 三:配置规划: 1.硬件方面: 服务器 交换机 中转机 终端设备(该项建议删除,如果需要增加计算机则保留) 2、从硬件上保证系统的可靠性和稳定性,当其中一颗硬盘物理上出现故障,系统将不会受到影响,仍然可以正常提供服务。只需后续更换故障硬盘。(该项也可以删除,购置新服务器后供应商在安装的时候你提出配raid5 或其他阵列方式即可) 服务器硬盘共分为C:D:E:F:四个逻辑分区。 C:区为系统区,用于安装服务器系统。 D:区为软件区存放系统所用软件。
Java多方式实现文件上传
在Struts 2中实现文件上传 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。 实现原理 Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现 前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。以下是例子所依赖类包的列表: 清单1 依赖类包的列表 首先,创建文件上传页面FileUpload.jsp,内容如下: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %> <% @ taglib prefix = " s " uri = " /struts-tags " %>
基于Java Web的猜歌游戏设计与实现(含源文件)
本科毕业论文(设计)题目:基于Java Web的猜歌游戏设计与实现 姓名: 学号: 专业:计算机科学与技术 院系:信息工程学院 指导老师: 职称学位:讲师/硕士 完成时间:2015年5月 教务处制
安徽新华学院本科毕业论文(设计)独创承诺书 本人按照毕业论文(设计)进度计划积极开展实验(调查)研究活动,实事求是地做好实验(调查)记录,所呈交的毕业论文(设计)是我个人在导师指导下进行的研究工作及取得的研究成果。据我所知,除文中特别加以标注引用参考文献资料外,论文(设计)中所有数据均为自己研究成果,不包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的工作已在论文中作了明确说明并表示谢意。 毕业论文(设计)作者签名: 日期:
基于Java Web的猜歌游戏设计与实现 摘要 随着社会的不断发展,越来越多的人面临的压力越来越大,人们渴望随时随地都能放松自我。然而游戏正成为人们释放压力,放松自己最行之有效的娱乐方式之一。而基于Java Web的猜歌游戏以其界面美观,操作简单,对硬件要求低等优点将会备受大家的青睐。系统通过数据库对用户基本信息和歌曲信息进行统一管理,借助经典的框架Servlet对数据进行处理,又选择了前端一些功能强大的插件对数据进行展示,将猜歌与游戏很好的结合起来,意在给用户创造了一个良好的交互平台。为了更好地管理和维护本系统,系统还专门设置了管理员角色和用户角色。管理员主要的任务在于对用户上传的歌曲进行审核。而用户则是享受猜歌的乐趣,使得猜歌游戏能够稳定、高效地运行。 为了增强游戏的趣味性,告别了原始猜歌游戏的不灵活性。该系统通过用户上传歌曲功能时时更新数据库,使得歌曲不断地更新,玩家与玩家之间可以互相分享歌曲。随着网络的发展,该游戏还存在大量地后续研究工作。 关键词:猜歌;游戏;数据;Servlet框架;Java Web
WebApi系列~通过HttpClient来调用WebApi接口
回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基于api项目的特殊性,它需要有一个完全安全的环境,所以,你的api控制器看起来有点特别,只有5个方法,而且都是标准的http方法,我觉得这种设计很不错,很清晰,而且为了实现安全性,它不支持使用传统的表单数据,取而代之的是FromBody参数,它指拿HttpRequestMessage里参数,而不是所有的Request数据,这是基于安全方面的考虑。一Api接口参数的标准性 Get方式,可以有多个重载,有多个参数 POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递 Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象 标准接口如图 二调用方,参数的标准性 在客户端进行接口调用时,我们以网页端为例,看一下网页端进行ajax跨域请求的代码
Get方式 $.ajax({ url: "http://localhost:52824/api/register", type: "GET", success: function (data) { console.log("json:" + data); } }); Post方式 $.ajax({ url: "http://localhost:52824/api/register", type: "POST", data: { '': '1' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value success: function (data) { console.log("post:" + data); } }); 三在控制台中实现Get方式获取接口数据(只有异步实现) ///
文件安全共享解决方案
文件安全共享解决方案 成本最低的文件安全存储、共享和数据采集安全采集解决方案 ●需求分析 传统的文件存储、共享和数据采集和报送基本都是通过:FTP 服务器、安全U盘和云存储服务三种主要方式。三种方式都存在的各种不同的安全隐患: 1)FTP 服务器,明文传输,文件数据不可控易泄露,同时不具备文件共享特征。 2)安全U盘,这是客户端方式,文件数据可控性差,无法共享文档,易造成病毒在内网传播,不易管理。 3)云存储服务,明文存储和传输,而且在文件控制方面也存在安全漏洞。 ●解决方案 通过部署一台TrustMore安全网关及一台数据存储服务器,即可完成数据安全报送、文件安全共享、数据安全采集及文件安全存储。 ●方案特点 1) 符合国家和行业安全标准 支持SM1、SM2、SM3、SM4国密码算法,符合国家密码管理局制订的《SSLVPN技术规范》,符合公安《信息安全技术访问控制产品技术规范》,符合公安《身份安全鉴别类信息安全产品技术规范》,符合公安部可信边界接入相关技术规范,符合公安部集中认证网关相关技术规范,符合国家保密局安全中间件相关技术规范,符合国家等级保护要求。 2) 充分利用现有信息化资源
实现协议转换,所有不安全的存储协议转换为安全的HTTPS协议,可将不安全的FTP 服务轻松转换为安全共享存储,化腐朽为神奇。 3)支持多种双因子身份认证方式,包括USBKey数字证书方式认证 4)支持多种移动终端,包括:Android、iPhone、iPad、WP8、Windows8等移动终端操作系统。 5)充分利用现有信息化资源,不用重新投资建设新的存储平台用户轻松享有云端文件安全共享,可以设置文件共享的下载次数、时间和在线操作权限。 6)独创的数据存储动态加密技术,用户自主可控数据加密密钥支持。 7)上传下载的双向断点续传。 8)支持文件访问、查看和拷贝的文件操作行为安全审计,便于文档安全问题的事后追溯。 ●主要功能 1)安全共享 ?公开分享:允许任何人下载 ?私密分享:只允许指定的人员下载 ?分享时限:只允许特定的时间内进行下载 ?分享权限:允许下载或者在线查看 2)安全认证 ?使用数字证书认证 ?绑定多个帐号,单点登录 3)文件分类 ?我的文档,按照文档、图片、视频、程序进行分类 ?我的共享,允许取消共享
Java实现视频网站的视频上传及视频播放功能
视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash 制作的播放器来播放该文件.项目中用制作的播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。?? ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。 1.能支持的格式 ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 2.不能支持的格式 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg 能解析的)格式. 实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具. 数据库 实例所需要的数据库脚本 drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer; create table tb_media( id int not null primary key auto_increment comment '主键' , title varchar(50) not null comment '视频名称' , src varchar(200) not null comment '视频存放地址' , picture varchar(200) not null comment '视频截图' , descript varchar(400) comment '视频描述' , uptime varchar(40) comment '上传时间' );
Struts1.2实现单文件上传讲解
Struts1 文件上传 在Web程序中的上传文件的功能一般会使用标签在客户端显示输入要上传的文件名的用户接口。如果读者使用过JSP/Servlet来处理客户端上传的文件就会知道,实现这个功能并不是很容易。而在Struts中为我们提供了一种机制,可以非常方便地将客户端上传的文件保存在服务端。 在Struts Html标签库中提供了一个
应用Servlet实现购物车
应用Servlet实现购物车 具体实现过程 1、创建封装商品信息的值JavaBean---------GoodsSingle package com.yxq.valuebean; public class GoodsSingle { private String name; //保存商品名称 private float price; //保存商品价格 private int num; //保存商品购买数量public String getName() { return name; } public void setName(String name) { https://www.360docs.net/doc/c9102474.html, = name; } public int getNum() { return num; } public void setNum(int num) { this.num = num; }
public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } } 2、创建工具JavaBean-------- MyTools 实现字符型数据转 换为整型及乱码处理 package com.yxq.toolbean; import java.io.UnsupportedEncodingException; public class MyTools { public static int strToint(String str){ //将String型数据转换为int型数据的方法 if(str==null||str.equals("")) str="0"; int i=0; try{ i=Integer.parseInt(str); //把str 转换成
java发送http的get、post请求
package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import https://www.360docs.net/doc/c9102474.html,.URL; import https://www.360docs.net/doc/c9102474.html,.URLConnection; import java.util.List; import java.util.Map; public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map
Web上传大文件的三种解决方案
Web上传文件的三种解决方案 王建斌赵靓 (肇庆学院,广东肇庆526061) (肇庆医学高等专科学校,广东肇庆526020) 摘要介绍了Web上传文件的三种客户端解决方案:HTML表单、RIA以及插件,它们都可以很好地实现文件上传任务,当然这还需要服务端代码的配合,其中RIA选择了Flex,插件选择了ActiveX作为代表来介绍。此外,重点在于构建和分析HTTP协议数据来提供大文件上传的实时上传进度显示。 关键词Web;HTTP;Flex;ActiveX;文件上传 1引言 如果是对于几KB至几MB字节的文件上传,确实没有必要写一篇文章去讨论,但是如果需要上传大文件,例如教师向网络学习系统上传软件、视频等几百MB甚至上GB大小的文件时,平常所用的方法要么失效,要么不能实时反映上传进度。 文中采用的方法对于小文件和大文件上传一视同仁,并且对可能采用的三种解决方案进行展示和总结。那么,可能采用的三种解决方案如下: (1)HTML Form(可含Javascript、Ajax)。 (2)RIA技术(Flex、Silverlight、JavaFX等)。 (3)插件技术(Acticx、Applet等)。 图1Web服务存储上传文件的方式 文件上传到服务器,一般可以存放于本地文件系统、数据库和远程FTP等。图1为文件上传到Web服务器的存放方式示意图。 浏览器/服务器(B/S)模式,其实是一种特殊形式的C/S,浏览器作为客户端,HTTP作为通信协议。面对简单的文件上传情况,客户端代码只需HTML表单,服务器编写简单的动态页面和处理代码。而对于复杂的大文件带进度显示的上传,则一般要深入了解HTTP 1.1协议[1]以及各类技术如何处理HTTP请求。文中所讲如图2所示的三种解决方案,主要指的是浏览器端的代码,而服务端不限制使用何种动态页面技术或代码模块。
Java文件上传类FileUploadUtil.java代码+注释
? 一个通用的Java文件上传类,支持上传图片,支持生成缩略图,设置最大上传文件字节数,不设置时默认10M,可接收来自表单的数据,当有多个文件域时, 只上传有文件的,忽略其他不是文件域的所有表单信息,支持用户对上传文件大小, 字节进行设置,本上传类可过滤掉以下文件类型:".exe", ".com", ".cgi", ".asp", ".php", ".jsp"等,你可自已添加过滤的文件后缀,上传文件时如果没有上传目录,则自动创建它。。。 ? package com.gootrip.util; import java.io.File; import java.util.*; import https://www.360docs.net/doc/c9102474.html,mons.fileupload.*; import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; import java.io.IOException; import https://www.360docs.net/doc/c9102474.html,mons.fileupload.servlet.ServletFileUpload; import https://www.360docs.net/doc/c9102474.html,mons.fileupload.disk.DiskFileItemFactory; import java.util.regex.Matcher; /** * TODO 要更改此生成的类型注释的模板,请转至 * 窗口-首选项- Java -代码样式-代码模板 */ public class FileUploadUtil {
//当上传文件超过限制时设定的临时文件位置,注意是绝对路径 private String tempPath = null; //文件上传目标目录,注意是绝对路径 private String dstPath = null; //新文件名称,不设置时默认为原文件名 private String newFileName = null; //获取的上传请求 private HttpServletRequest fileuploadReq = null; //设置最多只允许在内存中存储的数据,单位:字节,这个参数不要设置太大 private int sizeThreshold = 4096; //设置允许用户上传文件大小,单位:字节 //共10M private long sizeMax = 10485760; //图片文件序号 private int picSeqNo = 1; private boolean isSmallPic = false; public FileUploadUtil(){ } public FileUploadUtil(String tempPath, String destinationPath){ this.tempPath = tempPath; this.dstPath = destinationPath; }
用 Servlet 进行文件上传的原理和实现
用Servlet 进行文件上传的原理和实现 Servlet 是用 Java 编写的、协议和平台都独立的服务器端组件,使用请求/响应的模式,提供了一个基于 Java 的服务器解决方案。使用 Servlet 可以方便地处理在 HTML 页面表单中提交的数据,但 Servlet 的 API 没有提供对以 mutilpart/form-data 形式编码的表单进行解码的支持,因而对日常应用中经常涉及到到文件上传等事务无能为力。 如何用 Servlet 进行文件的上传,必须编程实现。 一、基本原理 通过 HTML 上载文件的基本流程如下图所示。 浏览器端提供了供用户选择提交内容的界面(通常是一个表单),在用户提交请求后,将文件数据和其他表单信息编码并上传至服务器端,服务器端(通常是一个 cgi 程序)将上传的内容进行解码了,提取出 HTML 表单中的信息,将文件数据存入磁盘或数据库。 二、各过程详解 A)填写表单并提交
通过表单提交数据的方法有两种,一种是 GET 方法,另一种是 POST 方法,前者通常用于提交少量的数据,而在上传文件或大量数据时,应该选用 POST 方法。在 HTML 代码中,在