如何使用Android Phonegap将文件从SD卡上的任何文件夹上传到服务器

问题描述:

我收到错误消息“对象对象”。我有一个SD卡中的文件夹。我想上传到服务器。我在我的服务器中有一个upload.php。如何使用Android Phonegap将文件从SD卡上的任何文件夹上传到服务器

function local() { 
     window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail); 
     window.resolveLocalFileSystemURI("file:///TestFolder/1.jpg", uploadOffline, fail); 
    } 
    function uploadOffline(fileEntry){ 
    checkConnection(); 

    var options = new FileUploadOptions(); 
    options.fileKey="file"; 
    options.mimeType="image/jpeg"; 

    var params = new Object(); 
    params.value1 = "test1"; 
    params.value2 = "param1"; 

    options.params = params; 
    options.chunkedMode = false; 
    var uri = fileEntry.toURI(); 
    var ft = new FileTransfer(); 
    ft.upload(uri, "http://www.myurl.com/upload.php", win, fail, options); 
    } 

我用这种方法上传日志文件。您必须更改文件和服务器地址的路径。 如果你不知道IP地址10.0.2.2是你的本地主机的android别名。我从其他站点获得了此方法。我只是改变了文件路径和服务器地址。

private void uploadMedia() throws IOException { 
    HttpURLConnection connection = null; 
    DataOutputStream outputStream = null; 
    DataInputStream inputStream = null; 

    String pathToOurFile ="/data/data/com.jos.finalsolution/files/LocationData"; 
    String urlServer = "http://10.0.2.2/phpvt/receiver.php"; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 

    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1*1024*1024; 

    try 
    { 
    FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile)); 
    URL url = new URL(urlServer); 
    connection = (HttpURLConnection) url.openConnection(); 

    // Allow Inputs & Outputs 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 
    connection.setUseCaches(false); 

    // Enable POST method 
    connection.setRequestMethod("POST"); 

    connection.setRequestProperty("Connection", "Keep-Alive"); 
    connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); 

    outputStream = new DataOutputStream(connection.getOutputStream()); 
    outputStream.writeBytes(twoHyphens + boundary + lineEnd); 
    outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd); 
    outputStream.writeBytes(lineEnd); 

    bytesAvailable = fileInputStream.available(); 
    bufferSize = Math.min(bytesAvailable, maxBufferSize); 
    buffer = new byte[bufferSize]; 

    // Read file 
    bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

    while (bytesRead > 0) 
    { 
    outputStream.write(buffer, 0, bufferSize); 
    bytesAvailable = fileInputStream.available(); 
    bufferSize = Math.min(bytesAvailable, maxBufferSize); 
    bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
    } 

    outputStream.writeBytes(lineEnd); 
    outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

    // Responses from the server (code and message) 
    int serverResponseCode = connection.getResponseCode(); 
    String serverResponseMessage = connection.getResponseMessage(); 
    fileInputStream.close(); 
    outputStream.flush(); 
    outputStream.close(); 

    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    //Exception handling 
    } 

} 
+0

这是java代码。我正在使用Phonegap,所以我需要JavaScript代码。我上面写的代码是用于捕获和上传照片的。我对从SD卡上传照片做了一些更改。但我想我错过了一些东西。 – Burak

+0

嗨,我想知道什么是maxBufferSize = 1 * 1024 * 1024;做 – John

不知道你是否找到了解决您的问题,但也许这个代码将帮助你。

function files() { 
    alert("Let's Start")  
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 
     function gotFS(fileSystem) { 
      fileSys = fileSystem; 
     } 
     , fsFail); 

    fileSys.root.getDirectory("myFolder/", {create: true, exclusive: false}, 
     function(parent) { 
      folder=parent; 
     } 
     , dirFail); 

     //Creating a reader 
     var directoryReader = folder.createReader(); 
     // Get a list of all the entries in the directory 
     directoryReader.readEntries(ReaderSucces,readerFail); 

    function ReaderSucces(entries){ 
     alert("I'm reading") 
     var i,len; 
     len = entries.length; 
     for (i=0; i<len; i++) { 
      if (entries[i].isDirectory) { 
       var directoryReaderIn = entries[i].createReader(); 
       directoryReaderIn.readEntries(ReaderSucces,readingFail); 
      } 
      if(entries[i].isFile==true) 
      { 
      entries[i].file(uploadFile, readingFail); 
      } 
     } 
    } 

    var fsFail = function(error) { 
      alert("failed with error code: " + error.code); 
    };     
    var dirFail = function(error) { 
     alert("Directory error code: " + error.code); 
    }; 
    var readerFail = function(error) { 
     alert("Reading Directory error code: " + error.code); 
    };   
    var readingFail = function (error){ 
     console.log("Reading Files error code: "+error.code); 
    }; 
} 

function uploadFile(file) { 
    console.log("Let's upload!!!" + file) 
    var target="http://YOUR_IP/upload.php"; //the url to upload on server 
    var ft = new FileTransfer(); 
    var path = file.fullPath; //"file://"+ 
    var name = file.name; 

    var ft = new FileTransfer(); 

    ft.upload(path, encodeURI(target), win, fail, { fileName: name, fileKey: "file", mimeType:"text/plain" }); 
      // var ft = new FileTransfer(); 
      //ft.upload(file.fullPath, target, win, fail, options); 
} 

的PHP在你的服务器(upload.php的)

<?php 
if ($_FILES["file"]["error"] > 0) { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
} else { 
    echo "Upload: " . $_FILES["file"]["name"] . "\n " ; 
    echo "Type: " . $_FILES["file"]["type"] . "\n "; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb\n "; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<\n "; 
    if (file_exists("uploads/" . $_FILES["file"]["name"])) { 
    echo $_FILES["file"]["name"] . " already exists. "; 
    } else { 
    move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]); //Save location 
    echo "Stored in: " . "uploads/" . $_FILES["file"]["name"]; 
    } 
} 
?> 

这将节省您的位置文件夹中的所有文件(甚至是目录内的那些)。希望它有效。

+0

我已经解决了我的问题,谢谢。 – Burak