在上一篇笔记《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实现客户端图片上传相关推荐

  1. android jersey 上传图片,图片上传--Jersey实现RESTful接口

    上次利用SpringMVC实现图片上传,这个是客户端将图片和其他字段一起上传然后一起处理的.(有什么坏处暂时也没有想到)总之这次的希望能够将图片存储的服务独立出来,暂时用Jersey实现一个接口(老大 ...

  2. CentOS7设置静态IP、搭建单机版FastDFS图片服务器、使用FastDFS-Client客户端进行简单测试、实现图片上传、实现商品添加修改删除

    CentOS7设置静态IP.搭建单机版FastDFS图片服务器.使用FastDFS-Client客户端进行简单测试.实现图片上传.实现商品添加修改删除 CentOS7设置静态IP而且还可以上网 192 ...

  3. java下传图片到tomcat服务器后,如何在页面显示,java图片上传服务器及客户端显示图片...

    我在上一篇文章SSM+Layui实现文件上传服务器中展示了如何将图片上传至服务器,保存到SQL server数据库中,本篇文章主要讲的是将图片上传到服务器上,保存在服务器的磁盘上,然后将图片路径保存到 ...

  4. 选择相册图片上传后,客户端显示图片却是被旋转过角度

    我想某位大哥也遇到过这个问题,就是手机相册选择图片时,显示是正的(未被旋转角度的),但是上传该图片后,客户端却显示被旋转了xx度的.那这肯定是客户不想出现的问题,同样也是我们开发者不想出现bug.我想 ...

  5. 上传文件服务器怎么做,图片上传到服务器后怎么生成可直接访问的链接

    我在客户端做头像上传,图片上传到服务器后保存在一个固定的文件夹内,现在我如何在客户端读取到这张图片. 运行环境是后端是node koa 相关代码exports.editcover = async (c ...

  6. 将图片上传到FTP服务器

    [FTP服务器] 介绍一个     ftp客户端工具:iis7服务器管理工具 IIs7服务器管理工具可以批量管理ftp站点,同时具备定时上传下载的功能. 作为服务器集成管理器,它最优秀的功能就是批量管 ...

  7. ueditor 图片上传 java_Spring+Vue整合UEditor富文本实现图片附件上传的方法

    下载UEditor 下载完整源码和JSP版本 Spring后端集成 1. 解压完整源码,拷贝jsp目录下的java源码,到spring mvc后端 jsp目录下java源码 集成spring mvc后 ...

  8. 商家后台-商品录入【商品图片上传】

    1.1 需求分析 在商品录入界面实现多图片上传 当用户点击新建按钮,弹出上传窗口 实现思路分析: AngularJS图片上传(异步请求上传图片). SpringMVC图片上传(配置文件上传依赖jar包 ...

  9. 商城项目笔记一:搭建Maven工程,利用Dubbo实现SOA面向服务框架,部署zookeeper注册中心,FastDFS框架实现图片上传,部署nginx服务器。

    文章目录 1. 商城项目总结笔记: 1.1. 第一天工作记录:搭建Maven工程 1.2. 第二天工作记录:创建SOA面向服务架构,通过工具类实现分页技术 1.3. 第三天工作记录:部署nginx服务 ...

  10. 项目中,微信利用jweixin进行图片上传

    首先,需求是这样的,要在微信端直接调用相册或者是照相机,如果是照相机的话那就利用file里边的 capture = "camera" 属性即可.如果是要直接定位到相册,那么就得用a ...

最新文章

  1. 【HTML】记录自己丢人过程:文本换行缩进都不会
  2. 微信小程序样式入门到精通(wxss)课程007-文本-text-align水平对齐
  3. QT的QMaterial类的使用
  4. 贷款用途有什么限制?非法用途有什么后果?
  5. 判断数组中是否包含某个字符(contains)
  6. System.Threading.Thread类方法
  7. 【ElasticSearch】Es 源码之 AnalysisModule 源码解读
  8. 在Python中使用MongoDB
  9. Atlas读写分离Mysql集群的搭建
  10. 【毕设】JAVA+SQL办公自动化系统(源代码+论文+外文翻译)
  11. Confluence 6 嵌套用户组的示例
  12. 讨论 innodb_log_block_size 变量
  13. jquery的快捷手册
  14. Python时间序列分析指南!
  15. LTE基本结构(常见接口)
  16. 很好用的邮件发送软件mutt
  17. matlab命令行运行,命令行运行matlab
  18. 解析ESX SERVER故障数据恢复方法
  19. Ctone T01双卡双待Android 2.2的3.5英寸电容式多点触摸的GSM智能手机带GPS无线上网
  20. pap认证失败_认证方式pap chap协议解读

热门文章

  1. 抖音热门技术998 修改视频md5
  2. 合天网安《Weekly CTF》第四周
  3. 共享打印机服务器脱机状态,打印机脱机工作怎么恢复 共享的打印机脱机状态...
  4. 问题:计算给定年月日的日期是星期几(泽勒一致性)
  5. BUUCTF Misc 神秘龙卷风
  6. 【JZOJ5336】【NOIP2017提高A组模拟8.24】提米树
  7. android手机常用浏览器,安卓手机浏览器对比 六款手机浏览器横评
  8. 热评云厂商:网易数帆8.5亿元,企业数字化服务带来差异化
  9. 添加网络位置(共享目录)
  10. 小米平板1刷los神盾系统