业务需求是这样的:微软云+servlet开发一个图片上传的功能,要求输入一个订单号,并上传对应的图片,后台接收图片,并调用微软云接口,将图片传到微软云存储上。

开发过程中间遇到一些小问题,记录并展示出来,提供给相似的业务作参考。

1.连接微软云的图片接口
https://www.azure.cn/documentation/articles/storage-java-how-to-use-blob-storage
需要使用Microsoft Azure Storage Library for Java,如果是maven项目,可以直接使用github上的maven依赖,配置即可。由于我直接基于Servlet开发,所以我直接把maven对应的jar包下载到了本地,maven仓库链接:azure-storage-4.0.0.jar
之后按照文档去开发就可以了,因为我的业务只涉及到了上传,因此项目中只有上传的业务和一个用于查看的检索代码。

微软云部分代码如下:
设置微软云参数:

public class SaveImage extends HttpServlet {public static final String storageConnectionString = "DefaultEndpointsProtocol=http;" + "AccountName=微软云账户名;"+ "AccountKey=分配的Key;"+"EndpointSuffix=core.chinacloudapi.cn";  private CloudStorageAccount storageAccount;private CloudBlobClient blobClient;private CloudBlobContainer container;private BlobContainerPermissions containerPermissions;...
}

在Servlet的init方法中初始化云连接

public void init() {System.out.println("init azureCloud");try {// 获得微软云连接storageAccount = CloudStorageAccount.parse(storageConnectionString);// 获得Blob客户端blobClient = storageAccount.createCloudBlobClient();// 定义containercontainer = blobClient.getContainerReference("zzqcontainer");// 配置访问权限为公开只读containerPermissions= new BlobContainerPermissions();containerPermissions.setPublicAccess(BlobContainerPublicAccessType.CONTAINER);container.uploadPermissions(containerPermissions);// 创建containercontainer.createIfNotExists();} catch (Exception e) {Data.writeLog(Global.ErrPath, "微软云启动失败" + e.getMessage());}}

上传图片到微软云:

String filePath = "D:\\feng\\perl-work\\zzq\\transInfo\\imageUpload\\"+orderid+"\\"+filename+"";
CloudBlockBlob blob = container.getBlockBlobReference(""+orderid+"/"+filename+"");
File source = new File(filePath);
blob.upload(new FileInputStream(source), source.length());

2.基于Servlet开发图片上传接口。使用的是fileupload插件,这里涉及到了两个jar包:
commons-fileupload-1.3.1.jar
commons-io-2.4.jar

fileupload可以直接把multipart/form-data形式的form解析出来,这样做的优势是可以在一个form里同时传订单号和图片内容。而不必将图片和文字做异步处理。

前端页面image.html

<form action="http://localhost:8080/transInfo/SaveImage" method="post" enctype="multipart/form-data">
<table>
<tr><td>订单号</td><td><input type="text" name="orderid"></td></tr>
<tr><td>图片1</td><td><input type="file" name="image1"></td></tr>
<tr><td>图片2</td><td><input type="file" name="image2"></td></tr>
<tr><td>图片3</td><td><input type="file" name="image3"></td></tr>
<tr><td><input type="submit" value="OK"></td></tr>
</table>
</form>

对应的Servlet代码:

ServletFileUpload:负责处理上传的文件数据,并将每部分的数据封装成一到 FileItem 对象中。
在接收上传文件数据时,会将内容保存到内存缓存区中,如果文件内容超过了 DiskFileItemFactory 指定的缓冲区的大小,那么文件将被保存到磁盘上,存储为 DiskFileItemFactory 指定目录中的临时文件。等文件数据都接收完毕后,ServletUpload再从文件中将数据写入到上传文件目录下的文件中

        private File uploadPath;private File tempPath;//这两个变量需要设置在class内tempPath = new File("D:\\feng\\perl-work\\zzq\\transInfo\\imageUploadtest\\");if (!tempPath.exists()) {tempPath.mkdir();}/*DiskFileItemFactory:创建 FileItem 对象的工厂,在这个工厂类中可以配置内存缓冲区大小和存放临时文件的目录。  */DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(8192);factory.setRepository(tempPath);ServletFileUpload upload = new ServletFileUpload(factory);/* 设置上传文件大小 */upload.setSizeMax(1000000 * 20);try {/* 解析request成一个list */List<FileItem> fileItems = upload.parseRequest(request);String orderid = "";/* 遍历list */for (Iterator<FileItem> iter = fileItems.iterator(); iter.hasNext();) {FileItem item = (FileItem) iter.next();/* 解析文本域 */if (item.isFormField()) {if ("orderid".equals(item.getFieldName())) {orderid = item.getString();/* 根据文本域定义上传路径 */uploadPath = new File("D:\\\\imageUpload\\" + orderid + "\\");if (!uploadPath.exists()) {uploadPath.mkdir();}}}/* 解析非文本域 */if (!item.isFormField()) {String fileName = item.getName();long size = item.getSize();if ((fileName == null || fileName.equals("")) && size == 0) {continue;}fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length());fileNameList.add(fileName);item.write(new File(uploadPath, fileName));}}System.out.println(orderid + "上传完成");

这样就相当于使用自己的服务器做中转,将页面传入的文件传输到了微软云上,避免了直接将微软云的账号密码暴露给第三方的风险。

微软云+Servlet实现图片上传接口相关推荐

  1. Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)

    写在前面 本文地址:http://www.cnblogs.com/yilezhu/p/9315644.html 作者:yilezhu 上一篇关于Asp.Net Core Web Api图片上传的文章使 ...

  2. 使用阿里云OSS实现图片上传案例

    文章目录 前言 一.OSS是什么? 二.使用步骤 1.开通OSS服务 2.创建bucket 3.创建子账户 4.查看帮助文档,编写后端代码 5.layui前端 总结 前言 在正式的开发环境中,类似图片 ...

  3. 第三方存储系统(一):阿里云OSS云存储配置及Java上传接口设计

    第三方存储系统(一):阿里云OSS云存储配置及Java上传接口设计 项目开发中,为了实现静态资源分离,提高系统运行的速率和稳定性,我们会把资源文件剥离出项目系统.而搭建文件存储系统就成为了不可或缺的工 ...

  4. 【校招VIP】[约起来] 接口设计1:图片上传接口

    今天来看商业实战项目约起来的第一个模块,活动发布模块的接口设计,这期课程包括两个接口,一个是图片上传,一个是活动发布后的提交. 首先了解图片上传接口,常规的图片上传需要前后端配合.前端通过接口传给后端 ...

  5. nodejs微信支付小微商户申请入驻时,如何实现图片上传接口

    微信支付小微商户可以通过小程序<微信买单服务商助手>来进件,也可以通过API接口来进件(详情可查阅小微商户专属接口文档). 通过API接口进件前需要先在商户资料中的身份证照片和门店照片通过 ...

  6. 性能服务器图片介绍大图,服务端图片图片上传接口性能压测总结

    服务端图片上传接口性能压测总结 一.性能测试时需要关注点 用户操作的相应时间 服务器资源使用情况是否合理 应用服务器和数据库资源使用是否合理 系统能否实现扩展 系统最多支持多少用户访问.系统最大业务处 ...

  7. 使用阿里云的OSS图片上传,这里是用的上传网络流

    使用阿里云的OSS图片上传,这里是用的上传网络流 思路: /** 文件上传到OSS 上传网络流 以下代码用于上传网络流: 1.通过element的el-upload插件,通过action发送请求到后台 ...

  8. Layui富文本编辑器图片上传接口(.NET C#)

    本来想偷懒找个现成的接口,搜了一下发现没有现成的,那我在这写一个并分享给大家吧. demo打包好了在我的csdn下载中心:http://download.csdn.net/download/xiang ...

  9. python生成图片链接_python 实现图片上传接口开发 并生成可以访问的图片url

    版本:python3.7 功能,开发一个用户访问的页面,支持图片上传,并将其保存在服务器. 项目结构: app.py文件内容如下: from flask import Flask, Response, ...

  10. Typora + Picgo + 阿里云oss实现图片上传

    Typora + Picgo + 阿里云oss实现图片上传 设置原因 Typora是一款markdown文本编辑器,无法承载本地图片存储的功能,书写好的文章上传到博客或其他设备上时会导致图片丢失,无法 ...

最新文章

  1. Django 状态保持3.5
  2. 谈谈职业规划——CSDN对我的采访
  3. 微信支付的架构真的那么牛吗?
  4. Nature Communications∣开花过程中,拟南芥茎尖分生组织基因表达和组蛋白标记的时空动态
  5. 产品经理的核心能力——看清问题本质
  6. 【前沿技术】Facebook 硬件负责人,带摄像头的智能眼镜将在 10 年内成为常态
  7. web api 二
  8. linux centos7重启路由命令行,centos7 永久添加静态路由
  9. java的子类对象_在Java中将子类对象分配给超类对象时会发生什么?
  10. JS面向对象特性和值类型与复合类型
  11. Docker自定义部署Redis镜像
  12. Docker容器kali镜像导出/导入
  13. Lintcode 730 所有子集的和
  14. 这可能是最好的RxJava 2.x 教程(完结版)
  15. matlab结构数组22,matlab结构数组
  16. win7怎么关闭虚拟机服务器,为你win7系统彻底关闭退出vmware虚拟机的处理对策
  17. TZC Python编程入门教程 ————题解
  18. Android创建子线程和回调主线程的几种方式
  19. gmod服务器文件,Garry’s Mod|Gmod服务器架设教程(四)挂载创意工坊插件
  20. 传奇服务器的爆率文件在哪里,传奇私服爆率调整

热门文章

  1. c语言vc怎么改变背景板颜色,VC OnCtlColor函数来修改控件背景颜色
  2. 陈龙杰计算机专业,第四届学生职业技能大赛获奖名单
  3. 城市公交线路查询系统mysql_公交车路线查询系统后台数据库设计
  4. 基于python+django框架+Mysql数据库的疫苗预约系统设计与实现
  5. 计算机sci转让,sci论文有没有转让的
  6. [DDC]Deep Domain Confusion: Maximizing for Domain Invariance
  7. Matplotlib confusion map显示不全
  8. 数据库设计的阶段任务
  9. java模拟器电脑版怎么安装教程_电脑Java模拟器安装使用教程
  10. 1096 大美数 分数 15