phonegap文件下传(Java,PHP)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了phonegap文件下传(Java,PHP),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4540字,纯文字阅读大概需要7分钟。
内容图文
![phonegap文件下传(Java,PHP)](/upload/InfoBanner/zyjiaocheng/216/f2401bbe95844e2fa7b2c3bea45b5b23.jpg)
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 < formDataLength) { 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端这样写的:
// 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 "
"; } } } 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的设置,并在本机运行通过。
内容总结
以上是互联网集市为您收集整理的phonegap文件下传(Java,PHP)全部内容,希望文章能够帮你解决phonegap文件下传(Java,PHP)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。