首页 > 后端开发 > php教程 > phonegap文件下传(Java,PHP)

phonegap文件下传(Java,PHP)

WBOY
发布: 2016-06-13 13:19:52
原创
801 人浏览过

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 
<p>?后来才发现,原来是少了一个致命的参数:options.chunkedMode = false;</p>
<p>?</p>
<p>关于chunkedMode的解析,请看:http://www.issociate.de/board/post/368589/How_to_force_the_apache_transfer_the_data_in_chunked_mode?.html
</p>
<p>?</p>
<p>大意是:如果文件长度无法预知时,使用chuckedMode模式传输,现在传输的是图片,大小已经知道,不知道为何apache服务器处理不过来,一定要将chunkedMode设成false,至此上传成功,感觉同学指点</p>
<p>?</p>
<p>为了这个参数,我还对比了php版本的文件上传:php的server端这样写的:</p>
<pre name="code" class="php"><?php // 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"]);
}

<span style="color: #ff0000;">// 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."<br>";
                echo "<img  src="%22.%24baseURI.%22?image=%22.%24curimg.%22&rnd=%22.uniqid().%22" alt=" phonegap文件下传(Java,PHP) " ><br>"; 
            }
        }
    }
    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";
            <span style="color: #ff0000;">options.chunkedMode = false;</span>



            // 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的设置,并在本机运行通过。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板