app端上传文件至服务器后台,web端上传文件存储到服务器

时间:2023-02-05 21:40:33

1.android前端发送服务器请求

在spring-mvc.xml 将过滤屏蔽(如果不屏蔽 ,文件流为空)

 <!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"> <property name="maxUploadSize"> <value>2000000000</value>
</property> <property name="maxInMemorySize"> <value>2000000000</value> </property>
</bean> -->

2.在spring-mvc.xml 中加入请求url:<value>fileUploadController.do?uploads</value>

     <!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="org.jeecgframework.core.interceptors.EncodingInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="org.jeecgframework.core.interceptors.AuthInterceptor">
<property name="excludeUrls">
<list>
<value>loginController.do?goPwdInit</value>
<value>loginController.do?pwdInit</value>
<value>loginController.do?login</value>
<value>loginController.do?checkuser</value>
<value>systemController.do?saveFiles</value>
<value>systemController.do?saveFilesBeads</value>
<value>systemController.do?saveFilesCustomer</value>
<value>systemController.do?saveNews</value>
<value>iconController.do?saveIcon</value>
<value>userController.do?savesign</value>
<value>xiNaiInterfaceController.do?interface</value>
<value>fileUploadController.do?uploads</value>
<value>jpPersonController.do?importExcel</value> <!-- for:[119]excel导入风格统一 -->
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>

3.服务器请求 获取存储目录

linux服务器无法再创建目录,windows可以多加入tomcat下

http://192.168.0.112:8080/properties/fileUploadController.do?uploads

 /***
* 文件上传例子 resource code encoding is utf-8
* <br>主要为了android客户端实现功能
*
*/
@Controller
@RequestMapping("/fileUploadController")
public class FileUploadController extends ActionSupport { @RequestMapping(params = "uploads")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter(); // 创建文件项目工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置文件上传路径
//String upload="D:/sinia/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties/upload/"; String upload = request.getRealPath("/");
// 获取系统默认的临时文件保存路径,该路径为Tomcat根目录下的temp文件夹
String temp = System.getProperty("java.io.tmpdir");
// 设置缓冲区大小为 5M
factory.setSizeThreshold(1024 * 1024 * 5);
// 设置临时文件夹为temp
factory.setRepository(new File(temp));
// 用工厂实例化上传组件,ServletFileUpload 用来解析文件上传请求
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
JSONObject ob = new JSONObject();
// 解析结果放在List中
try
{
List<FileItem> list = servletFileUpload.parseRequest(request); for (FileItem item : list)
{
String name = item.getFieldName();
InputStream is = item.getInputStream(); if (name.contains("content"))
{
System.out.println(inputStream2String(is));
}
else if(name.contains("file"))
{
try
{
inputStream2File(is, upload + "/" + item.getName()); //ob.put("path", upload + "\\" + item.getName());
ob.put("path", upload +item.getName());
out.write(ob.toString());
} catch (Exception e)
{
e.printStackTrace();
}
}
}
//out.write("success");
} catch (FileUploadException e)
{
out.write("failure");
} out.flush();
out.close();
}
// 流转化成字符串
public static String inputStream2String(InputStream is) throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = is.read()) != -1)
{
baos.write(i);
}
return baos.toString();
}
// 流转化成文件
public static void inputStream2File(InputStream is, String savePath)
throws Exception
{
System.out.println("文件保存路径为:" + savePath);
File file = new File(savePath);
InputStream inputSteam = is;
BufferedInputStream fis = new BufferedInputStream(inputSteam);
FileOutputStream fos = new FileOutputStream(file);
int f;
while ((f = fis.read()) != -1)
{
fos.write(f);
}
fos.flush();
fos.close();
fis.close();
inputSteam.close();
}

文件存储目录

D:/sinia/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties

后台加入上传功能:jsp上传文档:

jsp文档 加入上传功能

<script type="text/javascript">
function commonUpload() {
$.dialog({
content : "url:xnProjectController.do?uploadprofile",
lock : true,
title : "图片上传",
width : 400,
height : 100,
parent : windowapi,
cache : false,
zIndex : 9999, ok : function() {
var iframe = this.iframe.contentWindow;
iframe.uploadCallback(callback);
return true;
},
cancelVal : '关闭',
cancel : function() {
}
});
}
</script>
<td > 上传文件:</td>
<td ><input type="button" onclick="commonUpload()" value="工程进度文档文件"></td>
</tr>

在java控制器上

//上传文件
@RequestMapping(params = "uploadprofile")
public ModelAndView uploadprofile(HttpServletRequest req) {
return new ModelAndView("properties/xnUploadFile/uploadfile");
}

uploadfile.jsp

 <%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/servlet/XnUploadFileController" enctype="multipart/form-data" method="post">
上传文件:<input type="file" name="file"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

XnUploadFileController.java

 package jeecg.properties;

 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jeecg.system.pojo.base.TSDocument;
import jeecg.system.service.SystemService; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.jeecgframework.core.common.model.common.UploadFile;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.DataUtils;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.MyClassLoader;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import com.jspsmart.upload.SmartUpload; @Controller
@RequestMapping("/xnUploadFileController")
public class XnUploadFileController extends HttpServlet{
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(XnUploadFileController.class); @Autowired
private SystemService systemService;
private String message; public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
}
@RequestMapping(params = "upload")
public ModelAndView upload(HttpServletRequest request) {
return new ModelAndView("properties/xnUploadFile/uploadfile");
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 /**
*
* 在server 目录里创建upload文件夹
*
* .metadata\.plugins\org.eclipse.wst.server.core
*
*/ String savePath = this.getServletContext().getRealPath("/");
//String savePath ="D:/sinia/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties/upload/";
File file = new File(savePath);
//判断上传文件的保存目录是否存在
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath+"目录不存在,需要创建");
//创建目录
file.mkdir();
}
//消息提示
String message = "";
try{
//使用Apache文件上传组件处理文件上传步骤:
//1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2、创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
//3、判断提交上来的数据是否是上传表单的数据
/*if(!ServletFileUpload.isMultipartContent(request)){
//按照传统方式获取数据
return;
}*/
//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for(FileItem item : list){
//如果fileitem中封装的是普通输入项的数据
if(item.isFormField()){
String name = item.getFieldName();
//解决普通输入项的数据的中文乱码问题
String value = item.getString("UTF-8");
//value = new String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name + "=" + value);
}else{//如果fileitem中封装的是上传文件
//得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
if(filename==null || filename.trim().equals("")){
continue;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
//获取item中的上传文件的输入流
InputStream in = item.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath + filename);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
out.write(buffer, 0, len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();
//删除处理文件上传时生成的临时文件
item.delete();
message = "文件上传成功!";
}
}
}catch (Exception e) {
message= "文件上传失败!";
e.printStackTrace(); } /*request.setAttribute("message",message);
request.getRequestDispatcher("properties/xnUploadFile/message.jsp").forward(request, response);*/
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request, response);
}
}

servelet请求 web.xml中插入XnUploadFileController

<servlet-mapping>
<servlet-name>XnUploadFileController</servlet-name>
<url-pattern>/servlet/XnUploadFileController</url-pattern>
</servlet-mapping>

将文件存储到某一目录下:

//文件名
String savePath = this.getServletContext().getRealPath("/zjtjb/");
//String savePath ="D:/wuye/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/properties/upload/";
File file = new File(savePath);
//判断上传文件的保存目录是否存在
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath+"目录不存在,需要创建");
//创建目录
file.mkdir();
}
//消息提示
String message = "";

存储到某一目录:

System.out.println(filename);
if(filename==null || filename.trim().equals("")){
continue;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
//获取item中的上传文件的输入流
InputStream in = item.getInputStream();
//创建一个文件输出流

if (filename.contains("zjtjb")) {
//加上\ 才能生成目录
savePath=savePath+"\\";
FileOutputStream out = new FileOutputStream(savePath+ filename);

//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
out.write(buffer, 0, len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();
//删除处理文件上传时生成的临时文件
item.delete();
message = "文件上传成功!";
}
}
}
}catch (Exception e) {
message= "文件上传失败!";
e.printStackTrace();

}

app端上传文件至服务器后台,web端上传文件存储到服务器的更多相关文章

  1. Asp&period;net SignalR 实现服务端消息实时推送到所有Web端

    ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.实际上 Asp.net SignalR 2 实现 服务端消息推送到Web端, 更加 ...

  2. 后台web端的react

    在api.js里,存放着各种功能引用的方法,比如这个fakeRegister,里面传参数params,返回要要调回的地址,${HOST1}/user/register requset会返回codeme ...

  3. IOS 多文件上传 Java web端(后台) 使用List&lt&semi;MultipartFile&gt&semi; 接收出现的问题

    先上正确的示例: 主要是设置我们的request的content-type为multipart/form-data NSDictionary *param = @{@"assignee&qu ...

  4. ASP&period;NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件

    前言: 从开始学习Vue到使用element-ui-admin已经有将近快两年的时间了,在之前的开发中使用element-ui上传组件el-upload都是直接使用文件选取后立即选择上传,今天刚好做了 ...

  5. 无法处理文件 MainForm&period;resx,因为它位于 Internet 或受限区域中,或者文件上具有 Web 标记。要想处理这些文件,请删除 Web 标记

    无法处理文件 MainForm.resx,因为它位于 Internet 或受限区域中,或者文件上具有 Web 标记.要想处理这些文件,请删除 Web 标记 问题: 由于文件锁定,VS不能正常读取. 解 ...

  6. Comet技术详解:基于HTTP长连接的Web端实时通信技术

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

  7. Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...

  8. GIT服务器实现web代码自动部署

    之前在一台vps服务器上面搭建了Git服务器,用来做代码管理,方便团队开发.但是问题也就相应的来了,使用git可以轻松的上传代码,而由于做的是web开发,每次还都得到服务器上把代码手动pull或者复制 ...

  9. 软件工程大作业(学生会管理系统)Web端个人总结报告

    软件工程大作业(学生会管理系统)Web端个人总结报告 一.小组信息 1.所在小组:第二组 2.小组选题:学生会管理系统 3.项目源代码链接: Web端源代码:code 小程序端源代码:code APP ...

  10. 阿里云物联网套件&lpar;iot&rpar;设备间通信&lpar;M2M&rpar;在web端的实践

    之前通过nodejs连接到阿里云物联网mqtt,后又用浏览器连接,总结一下: 由于项目是SPA,使用webpack,关键代码: 同样使用mqtt.js之前先install: npm install - ...

随机推荐

  1. PowerBuilder笔记

    powerbuilder中怎样新建一个pbl文件 在创建pbw之后,右键单击pbw,点新建,弹出对话矿,按图操作,就能创建pbl 主程序入口: 主程序入口代码: // Profile ahzbmysq ...

  2. SACS &plus;Petrel 2009地震

    Bentley SACS V8i SS4 05.07.01.01 海洋平台分析Schlumberger Petrel 2009地震解释油藏模拟课程 Trimble Tekla Structural D ...

  3. (转载)HTML:模拟链接被按下,在新标签页打开页面,不使用window&period;open&lpar;可能被拦截&rpar;

    原文: http://www.cppblog.com/biao/archive/2010/08/21/124196.html 当按下一个按钮时,想打开一个新的标签页,可以使用window.open去实 ...

  4. HDU 2159 FATE【二维完全背包】

    题意:xhd玩游戏,还需要n个经验值升级,还留有m的忍耐度,但是他最多打s只怪,给出k个怪的经验值a[i],以及消耗的忍耐度b[i],问xhd能不能升级-- 因为有两个限定,忍耐度,和最多打s只怪(即 ...

  5. angularjs ng-class 两种用法

    ng-class="{'active':current.actived_tree==item}" ng-class="{true:'label-danger white- ...

  6. Java开发23中设计模式

    设计模式(Design Patterns) 设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结.使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性.毫无疑问 ...

  7. spring-线程池(2)

    继承:http://www.cnblogs.com/crazylqy/p/4220743.html spring设置容器启动时运行线程类(可循环执行) 修改以下两文件, 1.spring设置容器启动时 ...

  8. 数据结构 哈希表&lpar;Hash Table&rpar;&lowbar;哈希概述

    哈希表支持一种最有效的检索方法:散列. 从根来上说,一个哈希表包含一个数组,通过特殊的索引值(键)来访问数组中的元素. 哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表.哈希 ...

  9. VSTO 获取sheet单元格行列数

    Public Sub Igor() Dim Dtsheet As Excel.Worksheet Dim TotalC As Long '原始数据范围列 Dim TotalR As Long '原始数 ...

  10. 虚拟机设置固定ip可以使shell远程连接到服务器

    配置vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR = 你的本机ip 192.168.1. 的范围内 NETMASK = 255.255.2 ...