【问题标题】:How to upload file from any folder in sd card to server using Android Phonegap如何使用 Android Phonegap 将文件从 sd 卡中的任何文件夹上传到服务器
【发布时间】:2013-07-25 12:01:27
【问题描述】:

我收到错误消息“对象对象”。我在 SD 卡中有一个文件夹。我想把它上传到服务器。我的服务器中有一个 upload.php。

    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);
    }

【问题讨论】:

    标签: android file-upload cordova


    【解决方案1】:

    我使用这种方法上传日志文件。您必须更改文件的路径和服务器地址。 如果您不知道 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
        }
    
    }
    

    【讨论】:

    • 这是java代码。我正在使用 Phonegap,所以我需要 javascript 代码。我上面写的代码用于捕获和上传照片。我对从 SD 卡上传照片进行了一些更改。但我想我错过了一些东西。
    • 嗨,我想知道 maxBufferSize = 1*1024*1024;做
    【解决方案2】:

    不知道您是否找到了问题的解决方案,但也许这些代码会对您有所帮助。

    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"];
      }
    }
    ?>
    

    它将保存您文件夹中的所有文件(甚至是目录中的文件)。希望它有效。

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 2014-08-14
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多