java无刷新上传图片_Javascrpt无刷新文件上传

本文介绍了一个基于ArcGIS Web应用程序的文件上传功能实现方法,包括前端页面的交互设计及后端服务器端处理流程。详细讲解了如何使用JavaScript监听文件选择事件并提交表单,以及Node.js服务器端如何接收并处理上传文件。

48304ba5e6f9fe08f3fa1abda7d326ab.png

1

2

3

4 uploadInfo

5

6

7

48304ba5e6f9fe08f3fa1abda7d326ab.png

下面是简单的demo

961ddebeb323a10fe0623af514929fc1.png

ArcGIS Web Application

var upload = document.getElementById('placeholder');

var uploader = document.getElementById('uploader');

var app = document.getElementsByName('app')[0];

var clickLietener = function() {

app.click();

}

var changeListener = function() {

uploader.submit();

}

if (app.addEventListener) {

app.addEventListener('change', changeListener, false);

} else if (app.attachEvent) {

app.attachEvent('onchange', changeListener);

}

var appFrame = document.getElementById('frame');

var listener = function() {

var doc = appFrame.contentWindow.document;

var textAreas = doc.getElementsByTagName('textarea');

if (textAreas && textAreas.length > 0) {

var response = textAreas[0].value;

alert(response);

}

}

if (appFrame.addEventListener) {

appFrame.addEventListener('load', function(evt) {

listener();

}, false);

} else if(appFrame.attachEvent) {

appFrame.attachEvent('onload', function() {

listener();

});

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

ArcGIS Web Application

var upload = document.getElementById('placeholder');

var uploader = document.getElementById('uploader');

var app = document.getElementsByName('app')[0];

var clickLietener = function() {

app.click();

}

var changeListener = function() {

uploader.submit();

}

if (app.addEventListener) {

app.addEventListener('change', changeListener, false);

} else if (app.attachEvent) {

app.attachEvent('onchange', changeListener);

}

var appFrame = document.getElementById('frame');

var listener = function() {

var doc = appFrame.contentWindow.document;

var textAreas = doc.getElementsByTagName('textarea');

if (textAreas && textAreas.length > 0) {

var response = textAreas[0].value;

alert(response);

}

}

if (appFrame.addEventListener) {

appFrame.addEventListener('load', function(evt) {

listener();

}, false);

} else if(appFrame.attachEvent) {

appFrame.attachEvent('onload', function() {

listener();

});

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

961ddebeb323a10fe0623af514929fc1.png

var http = require('http');

var url = require('url');

var fs = require('fs');

var qs = require('querystring');

var formidable = require('formidable');

http.createServer(function(req, res) {

var _url = url.parse(req.url);

if (_url.pathname === '/index') {

fs.readFile('./index.html', function(err, data) {

res.writeHead(200, {

"Content-Type": "text/html; charset=UTF-8"

});

res.write(data);

res.end();

});

} else if (_url.pathname === '/upload') {

var formStream = new formidable.IncomingForm();

formStream.uploadDir = './tmp';

formStream.parse(req, function(err, fields, files) {

console.log(fields);

console.log(files);

var info = null;

var accept = req.headers.accept;

if (err) {

info = {success: false};

} else {

info = {success: true};

}

if (accept.indexOf('application/json') > -1) {

res.writeHead(200, {

"Content-Type": "application/json;charset=utf-8"

});

res.write(JSON.stringify(info));

} else {

res.writeHead(200, {

"Content-Type": "text/html; charset=UTF-8"

});

var responseText = '

' +

JSON.stringify(info) +

'

';

res.write(responseText);

}

res.end();

});

}

}).listen(8888);

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 var http = require('http');

2 var url = require('url');

3 var fs = require('fs');

4 var qs = require('querystring');

5 var formidable = require('formidable');

6

7 http.createServer(function(req, res) {

8 var _url = url.parse(req.url);

9 if (_url.pathname === '/index') {

10 fs.readFile('./index.html', function(err, data) {

11 res.writeHead(200, {

12 "Content-Type": "text/html; charset=UTF-8"

13 });

14 res.write(data);

15 res.end();

16 });

17 } else if (_url.pathname === '/upload') {

18 var formStream = new formidable.IncomingForm();

19 formStream.uploadDir = './tmp';

20 formStream.parse(req, function(err, fields, files) {

21 console.log(fields);

22 console.log(files);

23 var info = null;

24 var accept = req.headers.accept;

25 if (err) {

26 info = {success: false};

27 } else {

28 info = {success: true};

29 }

30 if (accept.indexOf('application/json') > -1) {

31 res.writeHead(200, {

32 "Content-Type": "application/json;charset=utf-8"

33 });

34 res.write(JSON.stringify(info));

35 } else {

36 res.writeHead(200, {

37 "Content-Type": "text/html; charset=UTF-8"

38 });

39 var responseText = '

' +

40 JSON.stringify(info) +

41 '

';

42 res.write(responseText);

43 }

44 res.end();

45 });

46 }

47 }).listen(8888);

48304ba5e6f9fe08f3fa1abda7d326ab.png

后台代码需要注意Content-Type响应头的设置,ie8、9碰到不知如何渲染的MIME类型会把它当成文件下载下来。这里和这里

3419f3f34e25e3eae93d1271e2ae38ca.png

b61fa985a4e56ab9d7eedaccbc6c8dfd.png

650d3bc075f61053236e3a61a79b9a5c.png

不知大家有没有注意到,上面的demo是一步上传,选择好文件后直接上传到服务器,ie8以上的浏览器没问题,如果是在ie8中情况就有些棘手。ie中文件上传控件长成这个样子,单击一下button会弹出文件选择框,如果单击的是text部分,没有反映,你需要双击才会弹出选择框。一个办法是让鼠标尽量单击button部分,button的大小跟font-size有关。但如果你的可点击区域太大。。。。。

所幸还是有解决办法的,这时需要在form中加一个label标签,for属性指向file。这样点击label时会触发for指向元素的click事件,这时label的自然行为。同时把file移除屏幕外。注意一定不能用input[type=button],在点击button时候调用file的click事件,然后在file change事件中调用form.submit方法,这种行为在ie中是被禁止的,回报“access denied”错误。

0ee04b712ab396133577456cbdca6770.png

961ddebeb323a10fe0623af514929fc1.png

2

3

4

5

6

7

ArcGIS Web Application

8

9

10

11 upload

12

13

14

15

16 var upload = document.getElementById('placeholder');

17 var uploader = document.getElementById('uploader');

18 var app = document.getElementsByName('app')[0];

19 var changeListener = function() {

20 uploader.submit();

21 }

22 if (app.addEventListener) {

23 app.addEventListener('change', changeListener, false);

24 } else if (app.attachEvent) {

25 app.attachEvent('onchange', changeListener);

26 }

27 var appFrame = document.getElementById('frame');

28 var listener = function() {

29 var doc = appFrame.contentWindow.document;

30 var textAreas = doc.getElementsByTagName('textarea');

31 if (textAreas && textAreas.length > 0) {

32 var response = textAreas[0].value;

33 alert(response);

34 }

35 }

36 if (appFrame.addEventListener) {

37 appFrame.addEventListener('load', function(evt) {

38 listener();

39 }, false);

40 } else if(appFrame.attachEvent) {

41 appFrame.attachEvent('onload', function() {

42 listener();

43 });

44 }

45

46

47

48

48304ba5e6f9fe08f3fa1abda7d326ab.png

1

2

3

4

5

6

7

ArcGIS Web Application

8

9

10

11 upload

12

13

14

15

16 var upload = document.getElementById('placeholder');

17 var uploader = document.getElementById('uploader');

18 var app = document.getElementsByName('app')[0];

19 var changeListener = function() {

20 uploader.submit();

21 }

22 if (app.addEventListener) {

23 app.addEventListener('change', changeListener, false);

24 } else if (app.attachEvent) {

25 app.attachEvent('onchange', changeListener);

26 }

27 var appFrame = document.getElementById('frame');

28 var listener = function() {

29 var doc = appFrame.contentWindow.document;

30 var textAreas = doc.getElementsByTagName('textarea');

31 if (textAreas && textAreas.length > 0) {

32 var response = textAreas[0].value;

33 alert(response);

34 }

35 }

36 if (appFrame.addEventListener) {

37 appFrame.addEventListener('load', function(evt) {

38 listener();

39 }, false);

40 } else if(appFrame.attachEvent) {

41 appFrame.attachEvent('onload', function() {

42 listener();

43 });

44 }

45

46

47

48

【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档介绍了基于伴随方法的有限元分析与p-范数全局应力衡量的3D应力敏感度分析,并结合拓扑优化技术,提供了完整的Matlab代码实现方案。该方法通过有限元建模计算结构在载荷作用下的应力分布,采用p-范数对全局应力进行有效聚合,避免传统方法中应力约束过多的问题,进而利用伴随法高效求解设计变量对应力的敏感度,为结构优化提供关键梯度信息。整个流程涵盖了从有限元分析、应力评估到敏感度计算的核心环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员与工程技术人员,尤其适合从事结构设计、力学仿真与多学科优化的相关从业者; 使用场景及目标:①用于实现高精度三维结构的应力约束拓扑优化;②帮助理解伴随法在敏感度分析中的应用原理与编程实现;③服务于科研复现、论文写作与工程项目中的结构性能提升需求; 阅读建议:建议读者结合有限元理论与优化算法知识,逐步调试Matlab代码,重点关注伴随方程的构建与p-范数的数值处理技巧,以深入掌握方法本质并实现个性化拓展。
下载前必看:https://pan.quark.cn/s/9f13b242f4b9 Android 平板设备远程操控个人计算机的指南 Android 平板设备远程操控个人计算机的指南详细阐述了如何运用 Splashtop Remote 应用程序达成 Android 平板设备对个人计算机的远程操控。 该指南被划分为四个环节:首先,在个人计算机上获取并部署 Splashtop Remote 应用程序,并设定客户端密码;其次,在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,并与之建立连接至个人计算机的通道;再次,在 Splashtop Remote 应用程序中识别已部署个人计算机端软件的设备;最后,运用平板设备对个人计算机实施远程操控。 关键点1:Splashtop Remote 应用程序的部署与配置* 在个人计算机上获取并部署 Splashtop Remote 应用程序,可通过官方网站或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码在平板控制计算机时用作验证,密码长度至少为8个字符,且需包含字母与数字。 * 在配置选项中,能够设定是否在设备启动时自动运行客户端,以及进行互联网搜索设置。 关键点2:Splashtop Remote 应用程序的 Android 版本获取与部署* 在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,可通过 Google Play Store 或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码用于连接至个人计算机端软件。 关键点3:运用 Splashtop Remote 远程操控个人计算机* 在 Splashtop Remote 应用程序中识别...
### JavaJavaScript的区别及其在实际开发中的应用场景对比 #### 1. 基本概念与语言特性 Java是一种静态类型的面向对象编程语言,强调强类型检查和编译时错误检测。它具有跨平台特性,通过JVM(Java虚拟机)运行,适用于构建大型、复杂的系统[^3]。 JavaScript则是一种动态类型的脚本语言,主要用于浏览器端的交互逻辑。尽管它的名称中包含“Java”,但两者在语法结构、设计理念和用途上有显著差异[^4]。 #### 2. 应用场景对比 ##### Java的应用场景 - **企业级应用开发**:Java因其稳定性和强大的生态系统,广泛应用于后端服务、数据库连接和分布式系统开发。Spring、Hibernate等框架进一步增强了其在企业级开发中的地位[^1]。 - **移动应用开发**:作为Android应用开发的主要语言,Java提供了丰富的API支持和良好的性能表现[^2]。 - **大数据技术**:Hadoop、Spark等大数据处理框架基于Java构建,使其成为数据科学家和工程师的重要工具[^5]。 - **嵌入式系统**:Java ME版本被设计用于资源受限的设备,如智能家居和物联网设备[^1]。 ##### JavaScript的应用场景 - **前端Web开发**:JavaScript是Web前端的核心技术之一,用于实现动态效果和用户交互。结合HTML和CSS,它可以创建高度交互式的网页[^4]。 - **后端Web开发**:通过Node.js,JavaScript可以运行在服务器端,支持全栈开发模式,提高开发效率[^3]。 - **移动应用开发**:React Native、Ionic等框架允许开发者使用JavaScript构建跨平台的移动应用程序[^3]。 - **游戏开发**:借助Canvas API或WebGL,JavaScript能够开发基于浏览器的游戏,甚至支持3D图形渲染。 #### 3. 语法结构对比 ##### 示例一:变量声明 ```java // Java int number = 10; ``` ```javascript // JavaScript let number = 10; ``` ##### 示例二:函数定义 ```java // Java public int add(int a, int b) { return a + b; } ``` ```javascript // JavaScript function add(a, b) { return a + b; } ``` ##### 示例三:类和对象 ```java // Java class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } } ``` ```javascript // JavaScript class Person { constructor(name, age) { this.name = name; this.age = age; } } ``` ##### 示例四:异步处理 ```java // Java (使用CompletableFuture) CompletableFuture.supplyAsync(() -> { // 异步任务 return "Result"; }).thenAccept(result -> { System.out.println(result); }); ``` ```javascript // JavaScript (使用Promise) new Promise((resolve, reject) => { setTimeout(() => resolve("Result"), 1000); }).then(result => { console.log(result); }); ``` #### 4. 实际工作开发中的使用技巧 ##### Java开发技巧 - 使用Maven或Gradle进行依赖管理,确保项目的模块化和可维护性[^2]。 - 利用Spring Boot快速搭建微服务架构,简化配置过程[^1]。 - 在多线程环境中,合理使用锁机制或并发工具包(如`java.util.concurrent`),避免线程安全问题[^3]。 ##### JavaScript开发技巧 - 使用ES6+语法(如箭头函数、模板字符串)提升代码可读性和简洁性[^4]。 - 在Node.js项目中,利用npm或yarn管理依赖,并编写清晰的`package.json`文件。 - 对于前端开发,采用模块化工具(如Webpack)优化资源加载和打包流程。 #### 5. JavaScript能否替代JavaJavaScript在某些领域确实可以部分替代Java,例如通过Node.js实现后端开发或使用React Native构建移动应用。然而,Java凭借其高性能、稳定性以及对企业级复杂系统的支持,在许多场景下仍然是不可替代的选择[^2]。此外,Java在大数据处理和嵌入式开发领域的优势也难以被JavaScript完全取代。 ### 结论 JavaJavaScript各有其独特的优势和适用场景。选择哪种语言取决于具体需求和项目背景。虽然JavaScript的功能不断扩展,但它无法完全替代Java在企业级应用、大数据处理和嵌入式系统中的角色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值