最近在做一个图片上传到服务器的功能,之前基本没有什么JS的经验,用的也是网上的插件。做了一个星期才把他弄好,现在做一下总结,方便以后查看。

用的插件是WebUploader,上面有很多例子,我找的例子如下图:

在实例化WebUploader的时候需要修改upload.js文件中的server的地址,这样才能将指定的图片上传到服务器代码如下:

     // 实例化
uploader = WebUploader.create({
pick: {
id: '#filePicker',
label: '点击选择图片'
},
formData: {
uid: 123
},
dnd: '#dndArea',
paste: '#uploader',
swf: 'Uploader.swf',
chunked: false,
chunkSize: 512 * 1024,
server:'Handler1.ashx',//用来处理上传图片的服务
// runtimeOrder: 'flash',
//文件过滤
accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/*'
},
});

需要注意的是,Handler1.ashx是一个处理上传图片的服务,用于将上传的图片保存到服务器上,文件代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Net;
using System.Web;
using System.Web.Services; namespace JQueryUploadDemo
{
/// <summary>
/// $codebehindclassname$ 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class UploadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Charset = "utf-8";
HttpPostedFile file = context.Request.Files["Filedata"];
string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"])+"\\";
if (file != null)
{
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
file.SaveAs(uploadPath + file.FileName);
//下面这句代码缺少的话,上传成功后上传队列的显示不会自动消失
context.Response.Write("");
}
else
{
context.Response.Write("");
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}

完成上传时候,前端需要获取服务器返回的数据,用于保存在数据库,找了半天,最后在webuploader.js的_finishFile函数中找到了,这里只显示部分代码:

// 完成上传。
_finishFile: function( file, ret, hds ) {
var owner = this.owner;
postfilename=ret._raw;//获取服务器返回的参数
return owner
.request( 'after-send-file', arguments, function() {
file.setStatus( Status.COMPLETE );
owner.trigger( 'uploadSuccess', file, ret, hds );
})
.fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。
if ( file.getStatus() === Status.PROGRESS ) {
file.setStatus( Status.ERROR, reason );
} owner.trigger( 'uploadError', file, reason );
})
.always(function() {
owner.trigger( 'uploadComplete', file );
});
},

获取返回的数据之后需要将数据传递到upload.js里面,用于保存到数据库中,upload.js中有stats = uploader.getStats(),是获取返回的一些信息的,在updateStatus函数

下面会贴出代码。但是stats对象中没有获取服务器返回的参数,只返回了上传的基本信息,这时候就需要在webuploader.js中的Queue函数中添加postfilenames属性,方法部分代码如下:

      function Queue() {

            /**
* 统计文件数。
* * `numOfQueue` 队列中的文件数。
* * `numOfSuccess` 上传成功的文件数
* * `numOfCancel` 被取消的文件数
* * `numOfProgress` 正在上传中的文件数
* * `numOfUploadFailed` 上传错误的文件数。
* * `numOfInvalid` 无效的文件数。
* * `numofDeleted` 被移除的文件数。
* * `postfilenames` 用来保存返回的文件名
* @property {Object} stats
*/
this.stats = {
numOfQueue: 0,
numOfSuccess: 0,
numOfCancel: 0,
numOfProgress: 0,
numOfUploadFailed: 0,
numOfInvalid: 0,
numofDeleted: 0,
numofInterrupt: 0,
postfilenames:new Array()
};

这个时候就可以在upload.js中的updateStatu方法中将返回的数据写入到数据库中,函数代码如下:

 function updateStatus() {
var text = '', stats;
if ( state === 'ready' ) {
text = '选中' + fileCount + '张图片,共' +
WebUploader.formatSize( fileSize ) + '。';
} else if ( state === 'confirm' ) {
stats = uploader.getStats();
if (stats.uploadFailNum) {
text = '已成功上传' + stats.successNum+ '张照片,'+
stats.uploadFailNum + '张照片上传失败,<a class="retry" href="#">重新上传</a>失败图片或<a class="ignore" href="#">忽略</a>'
}
} else {
stats = uploader.getStats();
AddImageInfo(stats);//自己添加的函数,将图片信息写入到数据库
text = '共' + fileCount + '张(' +
WebUploader.formatSize( fileSize ) +
'),已上传' + stats.successNum + '张'; if ( stats.uploadFailNum ) {
text += ',失败' + stats.uploadFailNum + '张';
}
}
$info.html( text );
}

自己定义了一个函数用于将数据保存在在数据库中,这里用的是ajax和webservice写入到数据库中的,函数代码如下:

        //将图片信息写入到数据库
function AddImageInfo(stats)
{
for (var i = 0;i<stats.postfilenames.length;i++){
var serverUrl = "http://localhost:8888/XXXXX.asmx";
$.ajax({
type: 'POST',
url: serverUrl + '/XXXXXX',
data: '{ stationAttas:' + stats[i].postfilenames[i] + '}',
datatype: "json",
headers: {
"Content-Type": "application/json"
},
success:
function (data) {//调用服务成功后返回的数据
alert(data);
},
error: function (XMLHttpRequest, textStatus) {
alert("XMLHttpRequest.state:" + XMLHttpRequest.state + "-XMLHttpRequest.readyState:" + XMLHttpRequest.readyState + "-textStatus:" + textStatus + "-XMLHttpRequest.responseText:" + XMLHttpRequest.responseText);
}
})
}
}

这样就把一个图片上传的功能实现了。另外一个随笔会介绍如何管理上传的图片。

最近在也在做ArcGIS For Js 的缓冲区查询功能功能,里面也有和一样的功能,顺便记录一下。

在使用缓冲区查询的时候,执行execute函数是,错误函数会弹出如下图所示的提示:

这个是因为:query.geometry是个多边形(含有的point多)导致的web service的url的参数个数大于2048个,而我们这里采用的是get方式(最大的字符数为2048)不是post方式,需要proxy.ashx做处理,需要两个文件proxy.ashx和proxy.config,下载地址 两个文件需要放在IIS中。在调用查询函数前加入下面两句代码即可。

  esriConfig.defaults.io.proxyUrl = "http://localhost/proxy.ashx";
esriConfig.defaults.io.alwaysUseProxy = false;

proxy.config代码如下:

<ProxyConfig mustMatch="true">
<serverUrls>
<!-- serverUrl options:
url = location of the ArcGIS Server, either specific URL or stem
matchAll = true to forward any request beginning with the url
token = (optional) token to include for secured service
-->
<serverUrl url="http://localhost:6080/arcgis/rest/services/Findtask/MapServer/0"
matchAll="true"
token=""></serverUrl>
<serverUrl url="http://localhost:6080/arcgis/rest/services/Findtask/MapServer/0"
matchAll="true"
token=""></serverUrl>
<serverUrl url="http://localhost:6080/arcgis/rest/services/Findtask/MapServer/0"
matchAll="true"></serverUrl>
<serverUrl url="http://localhost:6080/arcgis/rest/services/Findtask/MapServer/0"
matchAll="true"></serverUrl>
</serverUrls>
</ProxyConfig>

Jquery图片上传功能整理的更多相关文章

  1. megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题

    最近在弄微信端的公众号.订阅号的相关功能,发现原本网页上用的uploadify图片上传功能到手机端有的手机类型上就不能用了,比如iphone,至于为啥我想应该不用多说了吧(uploadify使用fla ...

  2. jquery 图片上传本地预览V1.2

    基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 代码进行小小的压缩 如果看源码 自己解压就行了 版本已升级  修复jquery版本问题  支持任意jqu ...

  3. Ueditor图片上传功能的配置

    之前的项目中碰到过图片上传功能的配置问题,但是没有记录下来,今天有个朋友突然又问到了我这个问题,当时没想起来之前怎么解决的,后来看了Ueditor的官方文档才回想起来. 官网文档巨多,一般大家遇到问题 ...

  4. Jquery图片上传组件,支持多文件上传

    Jquery图片上传组件,支持多文件上传http://www.jq22.com/jquery-info230jQuery File Upload 是一个Jquery图片上传组件,支持多文件上传.取消. ...

  5. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  6. drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法二

    drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一 中介绍了ckeditor的安装和配置方法,其实还有另一种新方法,不用IMCE模块. 不过需要ckfinder的JS库,可以 ...

  7. FLASH图片上传功能—从百度编辑器UEditor里面提取出来

    为了记录工作中碰到的各种问题,以及学习资料整理,今天开始,将以往的文章进行了一个整理,以后也开始认真的记录学习过程中的各种问题 在HTML里面的文件上传功能一直是个问题,为了实现上传文件大小限制,怎样 ...

  8. Jquery图片上传预览效果

    uploadPreview.js jQuery.fn.extend({ uploadPreview: function (opts) { var _self = this, _this = $(thi ...

  9. jquery图片上传

    总结两个图片上传的方法: 一:使用jquery.form中的ajaxSubmit来实现上传. <script src="~/JavaScript/jquery-1.10.2.min.j ...

随机推荐

  1. 【t001】不高兴的津津

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外 ...

  2. H3C Inverse ARP

  3. Capistrano:自动完成多台服务器上新版本的同步更新,包括数据库的改变

    https://baike.baidu.com/item/Capistrano/6844928?fr=aladdin   Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署we ...

  4. 在vue项目中如何添加eslint

    随着vue的越做越好,更多的开发者选择使用vue,本篇记录如何在vue项目中添加eslint. 首先第一种就是在vue项目创建初始时就选择了创建,随着初始化一起代入到了项目当中,那么要是一开始觉得es ...

  5. 降智严重——nowcoder练习赛46&&codeforces #561 Div2

    两场比赛降智不停,熬夜爆肝更掉rating nowcoder: https://ac.nowcoder.com/acm/contest/894#question T1:水题 T2:考虑a和b的子区间! ...

  6. Mac下SVN基本操作和常见错误

    一.基本操作 1  从服务器上下载代码 svn checkout http://xxx.xxx.xxx/xxx 2  获取最新的代码 svn update 3  提交代码 svn commit -m ...

  7. java 合并流(SequenceInputStream)

    需要两个源文件,还有输出的目标文件 SequenceInputStream: 将两个文件的内容合并成一个文件 该类提供的方法: SequenceInputStream(InputStream s1, ...

  8. js实现小数点四舍五入

    js实现小数点四舍五入 其实这个问题,在之前的面试中被提问到了,由于笔者平时都是用原生的toFixed()的方法来保留小数点,所以当时并没有回答出来这个问题,呜呜呜~.~

  9. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(16)之轻博客

    源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 项目到上面一步其实已经算 ...

  10. H3C 端口接入控制方式