81,092
社区成员
发帖
与我相关
我的任务
分享
package com.zznode.gixpert.groupnorms.action;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
*
* @author qixiaoran 转载于网络 http://blog.csdn.net/meteorlWJ/archive/2008/06/01/2450234.aspx
*/
public class FileUploadServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
// 限制文件的上传大小
private int maxPostSize = 100 * 1024 * 1024;
public FileUploadServlet() {
super();
}
public void destroy() {
super.destroy();
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//得到传递过来的文件名
String filename = charChange(request.getParameter("fileName"));
String uname = System.currentTimeMillis()+".mp3"; //取一个随机数作为上传文件的文件名避开中文文件名乱码的可能性
//得到当前tomcat的路径
String tomcaturi = request.getSession().getServletContext().getRealPath("");
// 定义文件的上传路径
String uploadPath = "";
if(System.getProperty( "os.name").indexOf("Windows") != -1){
uploadPath = tomcaturi+"\\resources\\mv\\"+uname;
}else{
uploadPath = tomcaturi+"/resources/mv/"+uname;
}
//保存文件到服务器中
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try {
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
try {
item.write(new File(uploadPath));
// item.write(new File(tomcaturi+"\\gixpertflex-sx\\resources\\mv\\"+filename));
if(System.getProperty( "os.name").indexOf("Windows") != -1){
modiXMLFile(tomcaturi+"\\flexconfig\\groupnorms\\playlist.xml", tomcaturi+"\\flexconfig\\groupnorms\\playlist.xml",
filename, "resources\\mv\\"+uname);
}else{
modiXMLFile(tomcaturi+"/flexconfig/groupnorms/playlist.xml", tomcaturi+"/flexconfig/groupnorms/playlist.xml",
filename, "resources/mv/"+uname);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
/**
* 字符串内码转换 GB2312 to iso8859-1
*/
public String charChange(String ori) {
if (ori == null || ori.length() == 0) {
return "";
}
String newstr = "";
try {
newstr = new String(ori.getBytes("ISO-8859-1"));
return newstr;
} catch (Exception e) {
e.printStackTrace();
return newstr;
}
}
/**
* 修改XML文件中内容,并另存为一个新文件
* @param filename 修改对象文件
* @param newfilename 修改后另存为该文件
* @param title 声音文件描述
* @param mp3url 上传的文件存放的地址
* @return 返回操作结果, 0表失败, 1表成功
*/
private int modiXMLFile(String filename,String newfilename,String title,String mp3url){
int returnValue = 0;
try{
SAXReader saxReader = new SAXReader();
FileInputStream in = new FileInputStream(new File(filename));
Document document = saxReader.read(createReader(in,"utf-8"));
/** 修改内容之一: 如果sound节点中sound参数的内容为true,则修改成false */
/** 先用xpath查找对象,将以前播放的声音文件标示置为false */
List list = document.selectNodes("/playlist/sound" );
Iterator iter = list.iterator();
while(iter.hasNext()){
Element ftpElement = (Element) iter.next();
if (ftpElement.attribute("isuse").getValue().equals("true")) {
ftpElement.attribute("isuse").setValue("false");
}
}
/** 将新增的声音文件增加到xml描述文件 **/
list = document.selectNodes("/playlist");
iter = list.iterator();
if(iter.hasNext()){
Element ownerElement = (Element)iter.next();
Element soundElement = ownerElement.addElement("sound");
soundElement.addAttribute("title",title);
mp3url = mp3url.replace("\\", "/");
soundElement.addAttribute("source",mp3url);
soundElement.addAttribute("isuse","true");
}
/** 将document中的内容写入文件中,另存为的文件 */
XMLWriter output = null;
/** 格式化输出,类型IE浏览一样 */
OutputFormat format = OutputFormat.createPrettyPrint();
/** 指定XML字符集编码 */
format.setEncoding("utf-8");
output = new XMLWriter(new OutputStreamWriter(new java.io.FileOutputStream(filename),"UTF-8"),format);
output.write(document);
output.close();
output = new XMLWriter(new OutputStreamWriter(new java.io.FileOutputStream(newfilename),"UTF-8"),format);
output.write(document);
output.close();
/** 执行成功,需返回1 */
returnValue = 1;
}catch(Exception e){
e.printStackTrace();
}
return returnValue;
}
protected Reader createReader(InputStream inputStream, String encoding) {
try{
return new BufferedReader(
new InputStreamReader(inputStream,encoding)
);
}
catch(Exception uee){
uee.printStackTrace();
}
return null;
}
}
Mp3Load.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" fontSize="12"
borderColor="#000000" headerHeight="25" color="#ffffff" creationComplete="init();"
showCloseButton="true" close="closewindow()"
title="告警声音文件上传" backgroundAlpha="0.50" backgroundColor="#000000"
verticalScrollPolicy="off" horizontalScrollPolicy="off">
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import flash.net.FileReference;
import mx.controls.Alert;
import mx.events.CloseEvent;
import flash.events.*;
private var file: FileReference;
private function init(): void{
Security.allowDomain("*");
file = new FileReference();
file.addEventListener(ProgressEvent.PROGRESS, onProgress);
file.addEventListener(Event.SELECT, onSelect);
file.addEventListener(Event.COMPLETE, completeHandle);
}
private function closewindow():void{
PopUpManager.removePopUp(this);
}
private function completeHandle(event:Event):void{
Alert.show("上传成功!");
PopUpManager.removePopUp(this);
}
private function upload(): void{
try{
var imageTypes:FileFilter = new FileFilter("Mp3 (*.mp3)", "*.mp3");
var allTypes:Array = new Array(imageTypes);
file.browse(allTypes);
// file.browse();
}catch(error:Error){
Alert.show("一次只能打开一个文件浏览!");
return;
}
}
private function onSelect(e: Event): void{
Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",
"确认上传",
Alert.YES|Alert.NO,
null,
proceedWithUpload);
}
private function onProgress(e: ProgressEvent): void{
lbProgress.text = " 已上传 " + e.bytesLoaded
+ " 字节,共 " + e.bytesTotal + " 字节";
var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
bar.setProgress(proc, 100);
bar.label= "当前进度: " + " " + proc + "%";
}
private function proceedWithUpload(e: CloseEvent): void{
if (e.detail == Alert.YES){
var request: URLRequest = new URLRequest("FileUploadMp3?fileName="+file.name);
try {
file.upload(request);
} catch (error:Error) {
trace("上传失败");
}
}
}
]]>
</mx:Script>
<mx:VBox width="100%" horizontalAlign="center">
<mx:Label id="lbProgress" text="上传"/>
<mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"
minimum="0" visible="true" maximum="100" label="当前进度: 0%"
direction="right" mode="manual" width="200"/>
<mx:Button label="上传文件" click="upload();"/>
</mx:VBox>
</mx:Canvas>
</mx:TitleWindow>