web端上传图片的几种方式
首先是后台要有一个上传图片的工具类:
- package utils;
- import java.io.File;
- import org.apache.commons.lang.StringUtils;
- import play.Logger;
- import play.Play;
- import com.google.gson.Gson;
- import com.ning.http.client.AsyncHttpClient;
- import com.ning.http.client.Response;
- import com.ning.http.multipart.FilePart;
- import com.ning.http.multipart.StringPart;
- public class PictureUploadUtils {
- public static String PICTURE_SERVER = Play.configuration.getProperty(
- "pic.host", "http://oss.iclass.cn/form");
- public static String PICTURE_SERVER_BASEURL = "http://oss.iclass.cn/smallfiles";
- private class Result {
- public boolean succ;
- public String html;
- }
- public class InfoResult {
- public int width;
- public int height;
- }
- public static String getUrlFromServer(File file) {
- final AsyncHttpClient client = new AsyncHttpClient();
- try {
- final Response response = client.preparePost(PICTURE_SERVER)
- .addBodyPart(new FilePart("qqfile", file))
- .addBodyPart(new StringPart("bucketName", "smallfiles"))
- .addBodyPart(new StringPart("source", "WEB")).execute()
- .get();
- final String responseBody = response.getResponseBody("utf8");
- if (responseBody == null) {
- Logger.error("[EndServer has not started.]");
- } else {
- Result result = new Gson().fromJson(responseBody, Result.class);
- return result.html;
- }
- } catch (Exception e) {
- Logger.error(e, e.getMessage());
- } finally {
- client.close();
- }
- return "";
- }
- public static InfoResult getInfoFromServer(String url) {
- final AsyncHttpClient client = new AsyncHttpClient();
- try {
- final Response response = client.prepareGet(url + "/info")
- .execute().get();
- final String responseBody = response.getResponseBody("utf8");
- if (responseBody == null) {
- Logger.error("[EndServer has not started.]");
- } else {
- return new Gson().fromJson(responseBody, InfoResult.class);
- }
- } catch (Exception e) {
- Logger.error(e, e.getMessage());
- } finally {
- client.close();
- }
- return null;
- }
- public enum Effect {
- PURE {// 原图
- @Override
- public String toString() {
- return "";
- }
- },
- FILL {// 填充
- @Override
- public String toString() {
- return "f";
- }
- },
- CUT {// 裁剪
- @Override
- public String toString() {
- return "c";
- }
- };
- @Override
- abstract public String toString();
- }
- public static boolean isFromPicServer(String picUrl) {
- return StringUtils.startsWithIgnoreCase(picUrl, PICTURE_SERVER_BASEURL);
- }
- /**
- * @author xz8885 获取指定大小图片的方法,当宽或高为零时为零的维度会等比缩放,均为0则返回原始图片
- *
- * @param width
- * @param height
- * @param defaultUrl
- * @return 图片url
- */
- public static String getPictureFromPicServer(int width, int height,
- Effect effect, String defaultUrl) {
- if (!isFromPicServer(defaultUrl)) {
- return defaultUrl;
- }
- String fileName = StringUtils.substringAfterLast(defaultUrl, "/");
- effect = effect == null ? Effect.PURE : effect;
- return PICTURE_SERVER_BASEURL + "/" + width + "_" + height
- + effect.toString() + "/" + fileName;
- }
- }
一、使用ajax上传
js代码如下:
- var upload = $("#uploadInput");
- $("#uploadImg").click(function(){
- <span style="white-space:pre"> </span>if($("#picNum").html()<5){
- upload.click();
- }else{
- alert( '已达到可上传图片数量上限');
- return;
- }
- });
- upload.change( function(){
- var formData = new FormData($("#uploadForm")[0]);
- $.ajax({
- <span style="white-space:pre"> </span> url: '/assist/upload',
- type: 'POST',
- data: formData,
- async: false,
- cache: false,
- contentType: false,
- processData: false,
- success: function (json) {
- <span style="white-space:pre"> </span>var url=json.data;
- <span style="white-space:pre"> </span>var str = '<li class="pic"><img src="'+url+'"><span class="pic-bg"></span><a href="javascript:;" class="picDelete pic-del">×</a></li>'
- <span style="white-space:pre"> </span>$("#uploadImg").parent().before(str);
- <span style="white-space:pre"> </span>$("#uploadInput").val("");
- <span style="white-space:pre"> </span>var num=Number($("#picNum").html())+1;
- <span style="white-space:pre"> </span>$("#picNum").html(num);
- <span style="white-space:pre"> </span> },
- error: function (json) {
- alert(json);
- }
- });
- });
对应的controller中方法:
- public static void upload(File file, String fileType) {
- String url = "";
- String pathname = file.getAbsolutePath().replaceAll(" ", "_");
- File newFile = new File(pathname);
- file.renameTo(newFile);
- url = PictureUploadUtils.getUrlFromServer(newFile);
- }
二、使用upload.js上传
upload.js 代码:
- /**
- * jQuery upload v1.2
- * http://www.ponxu.com
- *
- * @author xwz
- */
- (function($) {
- var noop = function(){ return true; };
- var frameCount = 0;
- var uploadDefault = {
- url: '',
- fileName: 'filedata',
- dataType: 'json',
- params: {},
- onSend: noop,
- onComplate: noop
- };
- $.upload = function(options) {
- var opts = $.extend(uploadDefault, options);
- if (opts.url == '') {
- return;
- }
- var canSend = opts.onSend();
- if (!canSend) {
- return;
- }
- var vcount=++frameCount;
- var frameName = 'upload_frame_' + vcount;
- var iframe = $('<iframe style="position:absolute;top:-9999px" />').attr('name', frameName);
- var form = $('<form id="formUpload_'+vcount+'" method="post" class="abs_out" enctype="multipart/form-data" />').attr('name', 'form_' + frameName).attr("target", frameName).attr('action', opts.url);
- // form中增加数据域
- var formHtml = '<input type="file" id="formUpload_file_'+vcount+'" name="' + opts.fileName + '" οnchange="onChooseFile(this)">';
- form.append(formHtml);
- iframe.appendTo("body");
- form.appendTo("body");
- // iframe 在提交完成之后
- iframe.load(function() {
- var contents = $(this).contents().get(0);
- var data = $(contents).find('body').text();
- if ('json' == opts.dataType) {
- var data1 = eval('(' + data + ')');
- }
- opts.onComplate(data1);
- setTimeout(function() {
- iframe.remove();
- form.remove();
- }, 5000);
- });
- // 文件框
- // alert($("#formUpload").attr("action"));
- $("#formUpload_"+vcount).children("input").click();
- };
- })(jQuery);
- // 选中文件, 提交表单(开始上传)
- var onChooseFile = function(fileInputDOM) {
- var form = $(fileInputDOM).parent();
- form.submit();
- };
对应的js代码:
- //附件上传
- var upload=function(options){
- Do('upload',function(options){
- $.upload({
- // 上传地址
- url: '/upload',
- // 文件域名字
- fileName: 'filedata',
- // 其他表单数据
- params: {name: 'pxblog'},
- // 上传完成后, 返回json, text
- dataType: 'json',
- // 上传之前回调,return true表示可继续上传
- onSend: function() {
- return true;
- },
- // 上传之后回调
- onComplate: function(json) {
- var path= json.data;
- alert(path);
- }
- });
- });
- }
- var uploadPic=function(){
- $("#uploadPicBtn").click(function(){
- var ele=$(this);
- upload(ele);
- })
- }
- uploadPic();
对应的controller方法:
- public static void upload() throws Exception {
- DataParser parser = DataParser.parsers.get(request.contentType);
- parser.parse(request.body);
- ArrayList<FileUpload> uploads = (ArrayList<FileUpload>) request.args
- .get("__UPLOADS");
- String fileName = "";
- for (FileUpload upload : uploads) {
- if (upload.getFileName().endsWith(".mp4")) {
- fileName = AudioUploadUtils.getUrlFromServer(upload.asFile());
- } else {
- fileName = PictureUploadUtils.getUrlFromServer(upload.asFile());
- }
- // break;
- }
- }
web端上传图片的几种方式相关推荐
- linux下实现web数据同步的四种方式(性能比较)
实现web数据同步的四种方式 ======================================= 1.nfs实现web数据共享 2.rsync +inotify实现web数据同步 3.rs ...
- 实现web数据同步的四种方式
实现web数据同步的四种方式 ======================================= 1.nfs实现web数据共享 2.rsync +inotify实现web数据同步 3.rs ...
- WEB通信交互的几种方式
WEB通信交互的几种方式 - 实时通信发展过程简介 简单介绍一下现在的WEB通信有以下几种方式:最基本的http请求方式,Ajax轮询,Ajax长轮询,HTML5推送事件,HTML5的WebSocke ...
- laravel 图片流_laravel实现上传图片的两种方式小结
第一:是laravel里面自带的上传方式(写在接口里面的) function uploadAvatar(Request $request) { $user_id = Auth::id(); $avat ...
- linux数据同步技术比较,linux下实现web数据同步的四种方式(性能比较)教程.docx
linux下实现web数据同步的四种方式(性能比较)教程 实现web数据同步的四种方式=======================================1.nfs实现web数据共享2.rs ...
- web服务器攻击的八种方式
随着互联网的高速发展,网络走进了千家万户,同时也有很大一部分人架设起了自己的网站.继而不安分的黑客们,又将目光对准了服务器攻击这个方式,从而破坏或取得服务器的管理权限.本文将主要讲述针对web服务器攻 ...
- core webapi缩略图_.Net Core WebApi上传图片的两种方式
我这边主要是为了上传图片,话不多说,上代码. 方式一:通过Form表单上传 后端: /// /// 上传图片,通过Form表单提交 /// /// [Route("Upload/FormIm ...
- 关于web端的消息推送方式转载
引言: 在互联网高速发展的时代里,web应用大有取代桌面应用的趋势,不必再去繁琐的安装各种软件,只需一款主流浏览器即可完成大部分常规操作,这些原因都在吸引着软件厂商和消费者.而随着各大厂商浏览器版本的 ...
- 移动端布局的5种方式
刚换公司,设计稿还没出,也没有安排新任务,所以抽空整理一下移动端布局方式. 移动端布局方式整理: 1.固定meta视图 <meta name="viewport" conte ...
最新文章
- 多视图立体匹配论文分享CasMVSNet
- Mac上实现ProxyChains-NG终端代理
- C++ 创建快捷方式
- Table tr td th表格使用案例
- android fragment contextmenu,在 fragment 中,无法为listView项创建 contextMenu_android_开发99编程知识库...
- 经典ICP算法的问题
- java.lang.NoClassDefFoundError: javax/transaction/Synchronization (jUnit测试报错)
- C++实现整数值转中文大写
- ubuntu 安装GPU黑屏 修改GRUB_安装Ubuntu 18.04系统的相关注意事项,及解决Ubuntu 双系统黑屏问题...
- 2022年C语言教程入门和最新C语言自学教程C语言进阶教程大全
- caffe安装血泪史:caffe不支持cuDNN8
- 华为安装gsm框架_华为Mate30Pro怎么安装谷歌服务框架?谷歌服务GMS框架安装方法...
- 搭建服务器处理系统(基于netty),基于Netty的农业物联网服务器系统设计.PDF
- 2019上半年教资综合素质——主观题
- 使用Python实现消息轰炸
- 利用python拼接图片代码_Python实现图片拼接的代码
- 学一点Wi-Fi:Roaming
- 【错误记录】Android Studio 编译报错 ( Module was compiled with an incompatible version of Kotlin. The binary )
- Linux中wget、yum与apt-get用法及区别
- 导师的SCI很少一作和通讯是怎么回事?