框架采用s2sm架构 ,处理apk上传下载, 处理图片上传下载,核心代码.

基于s2sm框架的项目 基于s2sm框架的项目,前台界面采用bootrasp,登录注册,创建课程,上传视频等功能 立即下载

前端:





转发:




类:@Controller("businessManage.AppToolAction") 

method:@Autowired
private AppToolService appToolService;

private File image; //数据文件

private String imageFileName; //数据文件名

private String imageContentType; //文件类型

private File app; //数据文件

private String appFileName; //数据文件名

private String appContentType; //文件类型
/**
* 上传APP应用工具
* @return 
*/
public String uploadTool() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/HTML;charset=UTF-8");

appToolService.uploadTool(image, imageFileName, imageContentType, app, appFileName, appContentType, request);

return "appToolList";
}


public void uploadTool(File image, String imageFileName, String imageContentType, File app, String appFileName, String appContentType, HttpServletRequest request) {

//获取参数
String title = request.getParameter("title");
String description = request.getParameter("description");
int  tool_type = Integer.parseInt(request.getParameter("tool_type"));//系统文档工具类型
String address = request.getParameter("address");
String tool_version = request.getParameter("tool_version");//系统文档工具的版本
String id = UUIDUtil.create();//生成id
String file_type =appFileName.substring(appFileName.lastIndexOf(".") + 1, appFileName.length());

//文件上传
String imageName = FileDealHelper.uploadFile(imageFileName, image, "tools");//上传app图片
String fileName=FileDealHelper.uploadFile(appFileName, app, "tools");//上传app


//组装server_address 
String server_address=fileName ;
// System.out.println(server_address);
 
Tools tools = new Tools(id, fileName, tool_version, file_type, app.length()+"", tool_type, 0, imageName, title, description, address,server_address);
//获取最高版本tools
Tools highestTools = getAppInfo(title, tool_type);
if(highestTools!=null){ //不存在,则versionCode default 1 
int nowVersionCode = highestTools.getVersionCode()+1;
tools.setVersionCode(nowVersionCode);
}else{
tools.setVersionCode(1);
}
dao.add(tools);

}


/**
* 上传文件
* 
* @param fileName
*            要上传的文件名称
* @param fileObject
*            要上传的文件对象
* @param folderName
*            指定存放文件的文件夹名称
* @return
*/
public static String uploadFile(String fileName, File fileObject,
String folderName) {
try {
fileName = UUID.randomUUID().toString().replaceAll("-", "")
+ fileName.replaceAll(".*\\.", ".");
FileDealHelper de = new FileDealHelper();
String uploadPath = de.getConfigPath("upload_path")
+ ServerUtils.getSysFileSeparator() + folderName;
if (fileObject != null) {
if (!new File(uploadPath).isDirectory()) { // 如果此目录不存在,则创建
new File(uploadPath).mkdirs();
}
File saveFile = new File(new File(uploadPath), fileName);
if (!saveFile.getParentFile().exists()) {
saveFile.getParentFile().mkdirs();
}
FileUtils.copyFile(fileObject, saveFile);
}
} catch (Exception e) {
e.printStackTrace();
}
return '/' + folderName + '/' + fileName;
}


/**
* 上传文件
* 
* @param fileName
*            要上传的文件名称
* @param fileObject
*            要上传的文件对象
* @param folderName
*            指定存放文件的文件夹名称
* @return
*/
public static String uploadFile(String fileName, File fileObject,
String folderName) {
try {
fileName = UUID.randomUUID().toString().replaceAll("-", "")
+ fileName.replaceAll(".*\\.", ".");
FileDealHelper de = new FileDealHelper();
String uploadPath = de.getConfigPath("upload_path")
+ ServerUtils.getSysFileSeparator() + folderName;
if (fileObject != null) {
if (!new File(uploadPath).isDirectory()) { // 如果此目录不存在,则创建
new File(uploadPath).mkdirs();
}
File saveFile = new File(new File(uploadPath), fileName);
if (!saveFile.getParentFile().exists()) {
saveFile.getParentFile().mkdirs();
}
FileUtils.copyFile(fileObject, saveFile);
}
} catch (Exception e) {
e.printStackTrace();
}
return '/' + folderName + '/' + fileName;
}



以上为上传



这里为下载的方法


@Controller("sys.PublicShowImage")



private final static Logger log = Logger.getLogger(PublicShowImage.class);

private String showImageUrl;

private String apkUrl;
//app
public void downApp() {
try {
String[] showImageUrls=showImageUrl.split("/");
StringBuffer sysShowImageUrl=new StringBuffer();
for (String imageName : showImageUrls) {
sysShowImageUrl.append(ServerUtils.getSysFileSeparator()).append(imageName);
}


OutputStream out = null;
HttpServletResponse response=ServletActionContext.getResponse();
out = response.getOutputStream();
response.setContentType("application/vnd.android.package-archive");
response.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(showImageUrls[2], "UTF-8"));
FileDealHelper.downLoadFile(out, sysShowImageUrl.toString());
} catch (Exception e) {
log.error(this, e);
} 
}


//图片
public void showImg() {
try {
OutputStream out = null;
out = ServletActionContext.getResponse().getOutputStream();
String[] showImageUrls=showImageUrl.split("/");
StringBuffer sysShowImageUrl=new StringBuffer();
for (String imageName : showImageUrls) {
sysShowImageUrl.append(ServerUtils.getSysFileSeparator()).append(imageName);
}
FileDealHelper.downLoadFile(out, sysShowImageUrl.toString());
} catch (Exception e) {
log.error(this, e);
} 
}



/**
* 根据文件路径下载文件
* 
* @param out
* @param imageUrl
*            图片路径
*/
public static void downLoadFile(OutputStream out, String imageUrl) {
FileDealHelper de = new FileDealHelper();
String filePath = de.getConfigPath("downLoad_path") + imageUrl;
File file = new File(filePath);
if (file.exists()) {
// 获取文件的输入流
FileInputStream fileInput = null;
BufferedInputStream bufferedInput = null;
try {
fileInput = new FileInputStream(file);
bufferedInput = new BufferedInputStream(fileInput);
// 输出的缓存
byte[] bufferedByte = new byte[1024];
int i = 0;
// 读取文件的输入流
while ((i = bufferedInput.available()) > 0) {
if (i < 1024) {
bufferedByte = new byte[i];
}
fileInput.read(bufferedByte);
out.write(bufferedByte);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedInput != null) {
bufferedInput.close();
}
if (fileInput != null) {
fileInput.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}



public void showImg() {
try {
OutputStream out = null;
out = ServletActionContext.getResponse().getOutputStream();
String[] showImageUrls=showImageUrl.split("/");
StringBuffer sysShowImageUrl=new StringBuffer();
for (String imageName : showImageUrls) {
sysShowImageUrl.append(ServerUtils.getSysFileSeparator()).append(imageName);
}
FileDealHelper.downLoadFile(out, sysShowImageUrl.toString());
} catch (Exception e) {
log.error(this, e);
} 
}



public static void downLoadFile(OutputStream out, String imageUrl) {
FileDealHelper de = new FileDealHelper();
String filePath = de.getConfigPath("downLoad_path") + imageUrl;
File file = new File(filePath);
if (file.exists()) {
// 获取文件的输入流
FileInputStream fileInput = null;
BufferedInputStream bufferedInput = null;
try {
fileInput = new FileInputStream(file);
bufferedInput = new BufferedInputStream(fileInput);
// 输出的缓存
byte[] bufferedByte = new byte[1024];
int i = 0;
// 读取文件的输入流
while ((i = bufferedInput.available()) > 0) {
if (i < 1024) {
bufferedByte = new byte[i];
}
fileInput.read(bufferedByte);
out.write(bufferedByte);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedInput != null) {
bufferedInput.close();
}
if (fileInput != null) {
fileInput.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

单细胞测序流程(八)单细胞的marker基因转化和​GO富集分析 系列文章目录 单细胞测序流程(一)简介与数据下载 单细胞测序流程(二)数据整理 单细胞测序流程(三)质控和数据过滤——Seurat包分析,小提琴图和基因离差散点图 单细胞测序流程(四)主成分分析——PCA 单细胞测序流程(五)t-sne聚类分析和寻找marker基因 单细胞测序流程(六)单细胞的细胞类型的注释 单细胞测序流程(七)单细胞的细胞类型轨迹分析———————————————— 本期主讲内容——单细胞的maeker基因转化和​富集分析 marker基因转化是为了将基因的id和基. 阅读详情

相关推荐

华为硬件逻辑岗笔试题(一)

积少成多,集腋成裘,坚持!!! 目录 1. 进制转换 2. 状态机和编码方式 3. 存储器的分类 4. Verilog语法中的操作符 5. 对组合逻辑的认识 6. 对时序逻辑的认识 7. 竞争冒险的认识 8. 基本时序逻辑电路 9. 建立时间和保持时间 10. 同步时序电路 11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...

qq_42235129的博客 1万+

s2sm搭建

S2sm搭建 1. 导入需要的jar包mybatis+spring+struct+mysql    2. 项目整体结构 3. 配置spring容器 applicationContext-dao.xml(主要用来配置数据源,sqlSession,mapper扫描器加载mapper) xml version="1.0"encoding="UTF-8"?> beans xmlns

hzs33的博客 2566

关于利用注解,自动装配搭建s2sm框架的整合

本人最近在根据项目优化升级框架,利用的是Sturts(2.5版本以后的)+Spring+mybatis,因为是用的2.5版本以后的Struts,所以感觉好坑的一说。浪费了2天多时间才整合好,现在把项目整合写出来,一方面对自己以后可能会用的上,另一方面,如果有需要的,可以参考下 首先是利用maven搭建的web工程,先看下整体框架: 第一:先写下SqlMapConfig.xml 在

qq_35357001的博客 847

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

我用两种方式玩转 MCP:CherryStudio vs VS Code 实测手记

MCP,全称,你可以理解为——给大模型装上“手脚”和“工具箱”。传统大模型像一位博学但手不能动的学者:“我知道怎么算圆周率,但没法打开计算器。而支持 MCP 的模型,能通过标准协议自动调用外部工具(比如fetch网络请求、readFile读文件、shell执行命令),真正做到“知行合一”。输入后**,保存,**之后就显示出来了MCP 不是“魔法”,而是把 AI 从“问答机”升级为“智能代理”的关键一步。工具本身不难,难的是“知道它能解决什么问题”。

zyq569的博客 1020

S2SM集成Shiro-登录验证

FormAuthenticationFilter.java a id="FormAuthenticationFilter.java" >FormAuthenticationFilter.javaa>

zhangfeng2124的专栏 571

ESXi 6.7升级17700523补丁全流程:从下载到验证的保姆级教程

本文提供ESXi 6.7升级17700523补丁的完整流程指南,涵盖从下载、上传到验证的详细步骤。通过SSH命令和vSphere Client操作,确保系统管理员能够安全高效地完成补丁升级,提升虚拟化环境的安全性和稳定性。

linux6sysadmin的博客 839

spring mvc 文件下载apk 之移动端下载失败记录

要搞一个最新版的apk下载的地址,所以,只能通过接口在实现这个功能。 网上插上的代码,都是类似这样的 @RequestMapping(value = "/getApp") public ResponseEntity&lt;byte[]&gt; getApp(HttpServletRequest request, HttpServletResponse ...

共同交流与成长 962

静态时序分析(STA)—— 标准单元库

目录 1、时序库 概览 2、时序模型 1、基本概念 2、影响因素 3、线性延时模型 4、非线性延时模型 5、单元时序弧 1、组合逻辑单元 2、时序逻辑单元 6、线负载模型 参考说明 上一篇,学习了 STA相关的基本概念,本篇继续学习 STA相关的 标准单元库。 1、时序库 概览 库文件概览: 2、时序模型 1、基本概念 2、影响因素 对于组合逻辑的时序弧而言,其延时的大小取决于: 1、输出负载,即,输出端的电容负载的大小。容性负载越大,...

记录所学,分享知识,结识挚友 2853

机器人轨迹规划——三次样条轨迹1(基于速度的求解方法)

三次样条轨迹是利用三次样条曲线来对给定的一系列点进行插值,从而得到一个光滑的轨迹。三次样条因为每段的多项式次数最高都是三阶的,所以可以得到2阶导数连续,也就是加速度连续的轨迹。假设给定了一系列的点q0q1q2qnq0​q1​q2​...qn​,以及每个点对应的参数t0t1t2tnt0​t1​t2​...tn​,计算一条三次样条曲线sts(t)st,该曲线通过给定的点q0q1q2qnq0​q1。

出门搔白首,若负平生志 1471

Android 上传图片到JavaWeb服务器

前言:在上一篇博客《Android 拍照、选择图片并裁剪》中主要说明了在Android中图片裁剪的一种方式,当然我们裁剪图片的最终目的是为了上传服务器,最常用的是设置用户头像。即用户在客户端拍照或者选择图片后上传服务器,服务器返回图片在服务器的地址,然后再携带用户信息与头像地址发送请求到服务器修改用户信息。或者上传图片到服务器的时候即携带用户信息,这样一次网略请求就可以搞定了。要根据不同的需求灵活

zwenkai 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

三大框架整合struts+spring+mybatis

action层 package com.action; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils;

w1056292190的博客 558

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

APP上传照片后台实现方法

APP上传照片,通过接口报错,代码如下: // 接收三个图片、merId、merName、certId //创建一个通用的多部分解析器. CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

A-bing的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android版本检测更新

最近看到有一篇文章,主要写Android如何检测版本更新,但有点无语,其实挺简单的问题,被说的如此复杂。于是想记录下来,希望能帮到需要的人。 检测版本更新的思路: 1.首先获取现app的versionCode,然后跟服务器返回的versionCode对比,若小于服务器的versionCode,则说明有新版本了,需要更新了。 2.服务器提供新版本的apk地址,共客户端进行下载安装。

XXX 2006

Mybatis入门与框架搭建

一. Web项目的Mybatis搭建 1. 准备: ① Mybatis的Jar包 mybatis-3.2.8.jar mysql-connector-java-5.1.30.jar ② 在MySQL中新建表 create table `user`( `id` varchar(64) NOT NULL COMMENT 'ID', `name` varchar(255) NOT N

Royi的博客 8572

安卓APK文件结构解析 怎样去除内置广告 及修改图标和文字

先学习基础知识: 1、APK文件结构 (1).AndroidManifest.xml 该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工具解开,

天涯路的专栏 3万+

S2Dao架构图

使用S2Dao功能时,必须作成JavaBeans,Dao(.java),dicon文件,SQL文件(.sql)。 各文件之间的关系如下图所示。 JavaBeans和表,Dao和JavaBeans,dicon文件和Dao,SQL文件和Dao相互之间是有关联的。   今天主要调查了S2Dao,从官网上下载了例子程序,看日文文档,在本地跑了下,还行。   说明:这...

kang的专栏 354

java路径中/的问题

windows支持两种文件分隔符“/”和“\” 且使用“/”时不需要转义 编写创建文件的代码应注意一点,在windows系统中路径中使用“\”,同时需要再加一个转义的“\”,即形成了类似如下的路径:   “path\\fileName”   此种路径在windows系统没什么不对,但是到了linux系统会出现问题,在linux系统会生成名为“path\”的一个文件夹,当你再...

Java 初学者 569

app上传图片到后台(Java)

最近需要给APP提供接口,其中有上传照片的,于是写了下面这个接口。 支持上传多个文件,包括但不限于图片。代码较简单,就不多作解释。 提一个点:由于是文件上传,因此不能把数据格式设置为"application/json;charset=UTF-8",会导致接口调不通,注意!  /** * 上传照片 * @return */ @RequestMapping(value="/upl...

在下头很铁的博客 9127

HTML5 APP应用实现图片上传及拍照上传功能

HTML 手机端代码如下: 拍照结果: $(document).ready(init); function init() { //为了便于使用这个接口,先做一下兼容性处理 navigator.getUserMedia = navigator.getUserMedia || navigator.webkit

记录编程生活 1万+

spring调度器的配置 ,s2sm

配置文件:        xmlns:p="http://www.springframework.org/schema/p"        xmlns:context="http://www.springframework.org/schema/context"        xmlns:tx="http://www.springframework.org/schema/tx"  

AVGworkld的博客 968

SM框架——详细整合教程(Spring+SpringMVC+MyBatis)

SM框架——详细整合教程(Spring+SpringMVC+MyBatis)

dongdong2980的博客 3万+

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 68
上一篇: @Scope("prototype")
下一篇: 关于mysql.xml文件中 #{_parameter}的说明
Nirvana--
博客等级 码龄10年 7粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值