热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phonegap文件上传(java_php),phonegap文件下传(Java,PHP)

phonegap文件上传(Java,PHP)phpnegap文件上传phonegap中的FileTransfer对象介绍:http:docs.phone

phonegap文件上传(Java,PHP)

phpnegap文件上传

phonegap中的FileTransfer对象介绍:

http://docs.phonegap.com/en/1.6.1/cordova_file_file.md.html#FileTransfer

今天的代码为同学所整理。在此记下来,供以后参考

FileTransfer

is an object that allows you to upload files to a server or download files from a server.

用于传文件到服务器端

它里面有示例,写得已经是非常的详细,其中有一段:

var options = new FileUploadOptions();

options.fileKey="file";

options.fileName=fileURI.substr(fileURI.lastIndexOf('/')+1);

options.mimeType="text/plain";

前端的完整版可以参考:http://www.oschina.net/question/200138_34919

今天在做图片上传的时候,怎整也无法在后端获取文件流,其中的Java逻辑如下:

int MAX_SIZE = 102400 * 102400;

DataInputStream in = null;

FileOutputStream fileOut = null;

String contentType = request.getContentType();

try {

if (contentType.indexOf("multipart/form-data") >= 0) {

in = new DataInputStream(request.getInputStream());

int formDataLength = request.getContentLength();

if (formDataLength > MAX_SIZE) {

return;

}

byte dataBytes[] = new byte[formDataLength];

int byteRead = 0;

int totalBytesRead = 0;

while (totalBytesRead

byteRead = in.read(dataBytes, totalBytesRead, formDataLength);

totalBytesRead += byteRead;

}

String file = new String(dataBytes);

String saveFile = file.substring(file.indexOf("filename=\"") + 10);

saveFile = saveFile.substring(0, saveFile.indexOf("\n"));

saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1, saveFile.indexOf("\""));

int lastIndex = contentType.lastIndexOf("=");

String boundary = contentType.substring(lastIndex + 1,contentType.length());

int pos;

pos = file.indexOf("filename=\"");

pos = file.indexOf("\n", pos) + 1;

pos = file.indexOf("\n", pos) + 1;

pos = file.indexOf("\n", pos) + 1;

int boundaryLocation = file.indexOf(boundary, pos) - 4;

// 取得文件数据的开始的位置

int startPos = ((file.substring(0, pos)).getBytes()).length;

// 取得文件数据的结束的位置

int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;

// 创建文件的写出类

fileOut = new FileOutputStream(System.getProperty("java.io.tmpdir") + "/aa.jpg");

// 保存文件的数据

fileOut.write(dataBytes, startPos, (endPos - startPos));

fileOut.close();

}

} catch (Exception ex) {

throw new ServletException(ex.getMessage());

}

后来才发现,原来是少了一个致命的参数:options.chunkedMode = false;

关于chunkedMode的解析,请看:http://www.issociate.de/board/post/368589/How_to_force_the_apache_transfer_the_data_in_chunked_mode?.html

大意是:如果文件长度无法预知时,使用chuckedMode模式传输,现在传输的是图片,大小已经知道,不知道为何apache服务器处理不过来,一定要将chunkedMode设成false,至此上传成功,感觉同学指点

为了这个参数,我还对比了php版本的文件上传:php的server端这样写的:

// Directory where uploaded images are saved

$dirname = "/tmp/phonegap/uploads";

// If uploading file

if ($_FILES) {

print_r($_FILES);

mkdir ($dirname, 0777, true);

move_uploaded_file($_FILES["file"]["tmp_name"],$dirname."/".$_FILES["file"]["name"]);

}

// If retrieving an image

else if (isset($_GET['image'])) {

$file = $dirname."/".$_GET['image'];

// Specify as jpeg

header('Content-type: image/jpeg');

// Resize image for mobile

list($width, $height) = getimagesize($file);

$newWidth = 120.0;

$size = $newWidth / $width;

$newHeight = $height * $size;

$resizedImage = imagecreatetruecolor($newWidth, $newHeight);

$image = imagecreatefromjpeg($file);

imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

imagejpeg($resizedImage, null, 80);

}

// If displaying images

else {

$baseURI = "http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];

$images = scandir($dirname);

$ignore = Array(".", "..");

if ($images) {

foreach($images as $curimg){

if (!in_array($curimg, $ignore)) {

echo "Image: ".$curimg."
";

echo "%22.%24baseURI.%22?image=%22.%24curimg.%22&rnd=%22.uniqid().%22
";

}

}

}

else {

echo "No images on server";

}

}

?>

php的代码参考:https://github.com/brycecurtis/articles/tree/master/CameraUpload

代码说明及解说在:https://www.ibm.com/developerworks/mydeveloperworks/blogs/94e7fded-7162-445e-8ceb-97a2140866a9/entry/upload_a_picture_using_phonegap_on_android8?lang=en

php版本的这个前端代码:

// Verify server has been entered

server = document.getElementById('serverUrl').value;

if (server) {

// Specify transfer options

var options = new FileUploadOptions();

options.fileKey="file";

options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);

options.mimeType="image/jpeg";

options.chunkedMode = false;

// Transfer picture to server

var ft = new FileTransfer();

ft.upload(imageURI, server, function(r) {

document.getElementById('camera_status').innerHTML = "Upload successful: "+r.bytesSent+" bytes uploaded.";

}, function(error) {

document.getElementById('camera_status').innerHTML = "Upload failed: Code = "+error.code;

}, options);

}

确实是含有chunkedMode=false的设置,并在本机运行通过。



推荐阅读
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • java的流分两大类,字节流和字符流。一般在cc++中,一个字节是8位,java也是一样。但是,在cc++中一个字符,即char一般也是8位(可能机器不同会有所不同),但java为 ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
  • 原文转自:http:blog.csdn.netchinasoftosgarticledetails7903045UploadAction.java:packagecr ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
author-avatar
陈尧倩682
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有