cordova結合wavemaker手機圖片上傳實現
1.增加cordova插件
* cordova plugin add org.apache.cordova.camera
* cordova plugin add org.apache.cordova.file
* cordova plugin add org.apache.cordova.file-transfer
2.在cordova的config.xml配置文件中增加如下屬性
<access origin="*" />
<gap:plugin name="org.apache.cordova.file" />
<gap:plugin name="org.apache.cordova.file-transfer" />
<gap:plugin name="org.apache.cordova.camera" />
3.修改wavemaker構建出的phonegap項目中的index.html文件
<script type="text/javascript" src="phonegap.js"></script>改成如下
<script type="text/javascript" src="cordova.js"></script>
4.修改wavemakerr構建出的phonegap項目中的lib\build\Gzipped下wm_phonegap_misc.js文件
1)if(window["PhoneGap"])改成
if(window["PhoneGap"] || window["cordova"])
2)destinationType:Camera.DestinationType.DATA_URL改成
destinationType:Camera.DestinationType.FILE_URI
3)d.callback({dataValue:“data:image/jpeg;base64,”+_43}改成
d.callback({dataValue:_43}修改成FILE_URI是因為插件file-transfer上傳時需要FILE_URI
5,直接利用wavemaker創建一個PhoneGapCall service,operation選擇capture_picture;創建一個Button,點擊時調用這個service,將得到的圖片顯示出來;再創建一個button,點擊上傳,wavemaker的腳本如下:
phoneGapBrowsePictureSuccess: function(inSender, inDeprecated) {
this.tempPicture.setSource(inSender.getValue("dataValue"));
this.uploadFileURL.setValue("dataValue",inSender.getValue("dataValue"));
},
phoneGapBrowsePictureError: function(inSender, inError) {
app.alert(inError);
},
uploadBtnClick: function(inSender) {
var fileURL=this.uploadFileURL.getValue("dataValue");
app.alert(fileURL);
var uri = encodeURI("http://192.168.88.126:8400/FileServer/servlet/PhoneGapFileServlet");
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=fileURL.substr(fileURL.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
var params = {};
//params.file = fileURL;
options.params = params;
var headers={'headerParam':'headerValue'};
options.headers = headers;
var ft = new FileTransfer();
ft.upload(fileURL, uri, this.win, this.fail, options);
},
win: function(r) {
app.alert("Code = " + r.responseCode);
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
},
fail: function(error) {
console.log(error);
app.alert("An error has occurred: Code = " + error.code);
console.log("upload error source " + error.source);
console.log("upload error target " + error.target);
},
6,Servlet寫法如下
package com.yonghong;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class PhoneGapFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html,charset=utf-8");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try{
File file1=null;
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
List<FileItem> list = upload.parseRequest(request);
for(FileItem fileItem:list){
if(fileItem.isFormField()){
System.out.println("is form field");
}else{
System.out.println("start upload:"+fileItem.getFieldName());
if("file".equals(fileItem.getFieldName())){
File remoteFile = new File(new String(fileItem.getName().getBytes(),"UTF-8"));
file1 = new File(this.getServletContext().getRealPath("/WEB-INF"),remoteFile.getName());
file1.getParentFile().mkdirs();
file1.createNewFile();
InputStream ins = fileItem.getInputStream();
OutputStream ous = new FileOutputStream(file1);
try{
byte[] buffer = new byte[1024];
int len=0;
while((len=ins.read(buffer))>-1){
ous.write(buffer, 0, len);
}
}finally{
ous.close();
ins.close();
}
}
}
}
}catch(FileUploadException e){
e.printStackTrace();
}
}
}
附上www的源碼