jersey文件服务器,通过jersey实现客户端图片上传
在上一篇笔记《SpringMVC实现图片上传》记录了将图片上传到本地的实现,在很多项目中都会有一台专门的文件服务器来保存文件的,这边记录下客户端通过jersey上传图片到文件服务端的实现。
由于要在不同主机上上传文件,所以不能直接通过流的方式来写,需要通过webService来完成,jersey是基于Java的一个轻量级RESTful风格的Web Services框架,它让客户端文件上传变得更简单。
1. maven依赖
spring的一些包以及fileupload和io包这边就不贴出来了。
com.sun.jersey
jersey-client
1.2
2. 配置tomcat下的conf/web.xml文件
打开文件服务器下的此文件,然后搜索readonly这个单词,可以看到这段注释代码:
通过注释可以看到默认情况下当我们进行put或者delete操作的时候,服务器是拒绝访问的,所以想向服务器上传文件必须将readonly属性设置为false。
default
org.apache.catalina.servlets.DefaultServlet
readonly
false
debug
0
listings
false
1
3. 在文件服务器上创建文件存储目录
文件存储目录.png
在webapp下创建一个upload目录,为了防止找不到目录,在空目录下随便添加一个文件。
4. controller代码
@Controller
@RequestMapping("/upload")
public class UploadController extends BaseController {
@RequestMapping(value = "/uploadPic", method = RequestMethod.POST)
@LoginCheck
public void uploadPic(HttpServletRequest request, PrintWriter out, String lastRealPath) throws IOException {
// 将当前上下文初始化给CommonsMultipartResolver
CommonsMultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
// 检查form中是否有enctype="multipart/form-data"
if (resolver.isMultipart(request)) {
// 强制转化request
MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
// 从表单获取input名称
Iterator iterable = req.getFileNames();
// 存在文件
if (iterable.hasNext()) {
String inputName = iterable.next();
// 获得文件
MultipartFile mf = req.getFile(inputName);
byte[] mfs = mf.getBytes();
// 定义文件名
String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
Random random = new Random();
for (int i = 0; i < 3; i++) {
fileName = fileName + random.nextInt(10);
}
// 获得后缀名
String oriFileName = mf.getOriginalFilename();
String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
// 要上传文件的绝对路径
String realPath = MallUtil.readProp("upload_file_path") + "/upload/" + fileName + suffix;
String relativePath = "/upload/" + fileName + suffix;
// 由于我们要在不同主机上上传文件,所以不能直接通过流的方式来写,需要通过webService来完成,这边借助Jersey来完成
Client client = Client.create();
// 判断是不是第一次上传,如果已经上传过则删除上一次上传的文件
if (StringUtils.isNotBlank(lastRealPath)) {
WebResource webService = client.resource(lastRealPath);
webService.delete();
}
WebResource webService = client.resource(realPath);
// 将文件传到主机上
webService.put(mfs);
// 将图片信息返回给界面回显
Map map = new HashMap();
map.put("realPath", realPath);
map.put("relativePath", relativePath);
// {"relativePath":"/upload/20170215135233634679.png","realPath":"http://localhost:8088/mall-file/upload/20170215135233634679.png"}
out.write(JsonUtil.jsonString(map));
}
}
}
}
5. 页面代码
需要回显就需要通过ajax来实现图片上传,这里使用的是jquery.form.js这个插件
jsp代码:
![](${path}/mall/image/load_image.png)
js代码:
function submitUpload() {
var option = {
url: path + "/upload/uploadPic.do",
type: "post",
dataType: "text", // 返回值的数据类型
beforeSubmit: function (formData, jqForm, options) {
var imageValue = $("#input-image").val();
imageValue = $.trim(imageValue);
return (imageValue != ""); // 没有选择图片,则中断上传请求
},
success: function (responseText) {
// {"relativePath":"/upload/20170215135233634679.png","realPath":"http://localhost:8088/mall-file/upload/20170215135233634679.png"}
var jsonObj = $.parseJSON(responseText);
$("#image").attr("src", jsonObj.realPath);
$("#input-relative-path").val(jsonObj.relativePath);
$("#input-last-path").val(jsonObj.realPath);
},
error: function () {
alert("系统错误");
}
};
$("#form").ajaxSubmit(option);
}
6. 常见错误
403 则是conf/web.xml中没有添加readonly为false的配置
409 : com.sun.jersey.api.client.UniformInterfaceException:
PUT http://localhost:8888/mall-file/upload/20170115104302348740.jpg returned a response status of 409 Conflict
确保项目部署在8888端口下并启动成功,确保项目中存在upload目录。
jersey文件服务器,通过jersey实现客户端图片上传相关推荐
- android jersey 上传图片,图片上传--Jersey实现RESTful接口
上次利用SpringMVC实现图片上传,这个是客户端将图片和其他字段一起上传然后一起处理的.(有什么坏处暂时也没有想到)总之这次的希望能够将图片存储的服务独立出来,暂时用Jersey实现一个接口(老大 ...
- CentOS7设置静态IP、搭建单机版FastDFS图片服务器、使用FastDFS-Client客户端进行简单测试、实现图片上传、实现商品添加修改删除
CentOS7设置静态IP.搭建单机版FastDFS图片服务器.使用FastDFS-Client客户端进行简单测试.实现图片上传.实现商品添加修改删除 CentOS7设置静态IP而且还可以上网 192 ...
- java下传图片到tomcat服务器后,如何在页面显示,java图片上传服务器及客户端显示图片...
我在上一篇文章SSM+Layui实现文件上传服务器中展示了如何将图片上传至服务器,保存到SQL server数据库中,本篇文章主要讲的是将图片上传到服务器上,保存在服务器的磁盘上,然后将图片路径保存到 ...
- 选择相册图片上传后,客户端显示图片却是被旋转过角度
我想某位大哥也遇到过这个问题,就是手机相册选择图片时,显示是正的(未被旋转角度的),但是上传该图片后,客户端却显示被旋转了xx度的.那这肯定是客户不想出现的问题,同样也是我们开发者不想出现bug.我想 ...
- 上传文件服务器怎么做,图片上传到服务器后怎么生成可直接访问的链接
我在客户端做头像上传,图片上传到服务器后保存在一个固定的文件夹内,现在我如何在客户端读取到这张图片. 运行环境是后端是node koa 相关代码exports.editcover = async (c ...
- 将图片上传到FTP服务器
[FTP服务器] 介绍一个 ftp客户端工具:iis7服务器管理工具 IIs7服务器管理工具可以批量管理ftp站点,同时具备定时上传下载的功能. 作为服务器集成管理器,它最优秀的功能就是批量管 ...
- ueditor 图片上传 java_Spring+Vue整合UEditor富文本实现图片附件上传的方法
下载UEditor 下载完整源码和JSP版本 Spring后端集成 1. 解压完整源码,拷贝jsp目录下的java源码,到spring mvc后端 jsp目录下java源码 集成spring mvc后 ...
- 商家后台-商品录入【商品图片上传】
1.1 需求分析 在商品录入界面实现多图片上传 当用户点击新建按钮,弹出上传窗口 实现思路分析: AngularJS图片上传(异步请求上传图片). SpringMVC图片上传(配置文件上传依赖jar包 ...
- 商城项目笔记一:搭建Maven工程,利用Dubbo实现SOA面向服务框架,部署zookeeper注册中心,FastDFS框架实现图片上传,部署nginx服务器。
文章目录 1. 商城项目总结笔记: 1.1. 第一天工作记录:搭建Maven工程 1.2. 第二天工作记录:创建SOA面向服务架构,通过工具类实现分页技术 1.3. 第三天工作记录:部署nginx服务 ...
- 项目中,微信利用jweixin进行图片上传
首先,需求是这样的,要在微信端直接调用相册或者是照相机,如果是照相机的话那就利用file里边的 capture = "camera" 属性即可.如果是要直接定位到相册,那么就得用a ...
最新文章
- 【HTML】记录自己丢人过程:文本换行缩进都不会
- 微信小程序样式入门到精通(wxss)课程007-文本-text-align水平对齐
- QT的QMaterial类的使用
- 贷款用途有什么限制?非法用途有什么后果?
- 判断数组中是否包含某个字符(contains)
- System.Threading.Thread类方法
- 【ElasticSearch】Es 源码之 AnalysisModule 源码解读
- 在Python中使用MongoDB
- Atlas读写分离Mysql集群的搭建
- 【毕设】JAVA+SQL办公自动化系统(源代码+论文+外文翻译)
- Confluence 6 嵌套用户组的示例
- 讨论 innodb_log_block_size 变量
- jquery的快捷手册
- Python时间序列分析指南!
- LTE基本结构(常见接口)
- 很好用的邮件发送软件mutt
- matlab命令行运行,命令行运行matlab
- 解析ESX SERVER故障数据恢复方法
- Ctone T01双卡双待Android 2.2的3.5英寸电容式多点触摸的GSM智能手机带GPS无线上网
- pap认证失败_认证方式pap chap协议解读