2015-08-06 2 views
1

Я использую API Filetransfer в приложении phonegap.Загрузка файла Phonegap - как получить расширение файла?

Теперь я не могу обойти это и не могу найти решение.

Я использовал оба .toURL() и .fullPath, но оба возвращаются одинаково.
Если я использую:

window.resolveLocalFileSystemURL(imageURI, function(entry){ 
    console.log(entry.toURL()+' -- ' +entry.fullPath); 
}); 

я получаю:

содержание: //com.android.providers.media.documents/document/image%3A8055 - /com.android.providers. media.documents/document/image% 3A8055

Есть ли простой способ получить расширение или даже полное имя файла, снятого телефоном?

Спасибо за ввод.

+1

Вы можете попробовать этот плагин, чтобы получить реальный путь https://github.com/hiddentao/cordova-plugin- filepath – jcesarmobile

+0

@jcesarmobile Я дам ему go – Estobia

+0

Это не работает, что бы я ни делал или не помещал в него, он всегда дает мне «Невозможно прочитать свойство» resolveNativePath «неопределенного», даже если положить туда строку. возможно, я сделал что-то не так. Я не профессионал, но документация по плагину кажется почти ни к чему. но спасибо, я дам хедз-ап, если я когда-нибудь заставлю его работать. @jcesarmobile – Estobia

ответ

0

Я думаю, что то, что вы ищете, должно быть чем-то вроде этого.

var file = "sample.jpg"; 
 
\t 
 
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSys){ 
 
\t fileSys.root.getDirectory("FolderName", 
 
\t \t \t \t {create:true, exclusive: false}, 
 
\t \t \t \t function(directory) { 
 
\t \t \t \t \t alert("File URL: "+directory.toURL()+file); 
 
\t \t \t \t }, getDirectoryError); 
 
\t \t \t \t }, 
 
getDirectoryError); 
 
function getDirectoryError(error) { 
 
    console.log("getDirectoryError: "+error.code); 
 
}

0

Этот ответ является «обходным путем», только если вы не можете получить расширение файла из вашей версии Кордовы API.

Поскольку вы не можете извлечь большую информацию о строчном URI, то, что я сделал, было сканирование через другие объекты, предоставленные Cordova, тогда я нашел объект File, который содержит по крайней мере то, что мне нужно, тип MIME.

Из клиентской стороны кода вам нужно сделать, это:

// After you get the URI of the file 
window.resolveLocalFileSystemURL(fileUri, function(fileEntry) { 
    fileEntry.file(function(file) { 
     uploadFile(fileEntry, file.type); 
    }); 
}); 

// Code snippet for uploadFile function 
function uploadFile(fileEntry, fileType) { 
    var serverUrl = DOMAIN + 'api/upload-file.php'; 
    var options = new FileUploadOptions(); 

    options.fileKey = "file"; 
    options.fileName = fileEntry.name; 
    options.mimeType = fileType; 
    options.chunkedMode = false; 
    // More codes are omitted for brevity 
} 

Если вы используете PHP в качестве сервера стороны сценария а, вы можете извлечь информацию, которую вы вводили ранее, используя $_FILES['file'] , который разрешает загруженный файл и $_FILES['file']['type'], который будет разрешать тип MIME этого файла.

Теперь для отображения его в имя расширения, вы можете использовать код ниже:

function mimeToExt($mime) { 
    $extensions = array(
     'hqx' => array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'), 
     'cpt' => 'application/mac-compactpro', 
     'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'), 
     'bin' => array('application/macbinary', 'application/mac-binary', 'application/octet-stream', 'application/x-binary', 'application/x-macbinary'), 
     'dms' => 'application/octet-stream', 
     'lha' => 'application/octet-stream', 
     'lzh' => 'application/octet-stream', 
     'exe' => array('application/octet-stream', 'application/x-msdownload'), 
     'class' => 'application/octet-stream', 
     'psd' => array('application/x-photoshop', 'image/vnd.adobe.photoshop'), 
     'so' => 'application/octet-stream', 
     'sea' => 'application/octet-stream', 
     'dll' => 'application/octet-stream', 
     'oda' => 'application/oda', 
     'pdf' => array('application/pdf', 'application/force-download', 'application/x-download', 'binary/octet-stream'), 
     'ai' => array('application/pdf', 'application/postscript'), 
     'eps' => 'application/postscript', 
     'ps' => 'application/postscript', 
     'smi' => 'application/smil', 
     'smil' => 'application/smil', 
     'mif' => 'application/vnd.mif', 
     'xls' => array('application/vnd.ms-excel', 'application/msexcel', 'application/x-msexcel', 'application/x-ms-excel', 'application/x-excel', 'application/x-dos_ms_excel', 'application/xls', 'application/x-xls', 'application/excel', 'application/download', 'application/vnd.ms-office', 'application/msword'), 
     'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint', 'application/vnd.ms-office', 'application/msword'), 
     'pptx' => array('application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/x-zip', 'application/zip'), 
     'wbxml' => 'application/wbxml', 
     'wmlc' => 'application/wmlc', 
     'dcr' => 'application/x-director', 
     'dir' => 'application/x-director', 
     'dxr' => 'application/x-director', 
     'dvi' => 'application/x-dvi', 
     'gtar' => 'application/x-gtar', 
     'gz' => 'application/x-gzip', 
     'gzip' => 'application/x-gzip', 
     'php' => array('application/x-httpd-php', 'application/php', 'application/x-php', 'text/php', 'text/x-php', 'application/x-httpd-php-source'), 
     'php4' => 'application/x-httpd-php', 
     'php3' => 'application/x-httpd-php', 
     'phtml' => 'application/x-httpd-php', 
     'phps' => 'application/x-httpd-php-source', 
     'js' => array('application/x-javascript', 'text/plain'), 
     'swf' => 'application/x-shockwave-flash', 
     'sit' => 'application/x-stuffit', 
     'tar' => 'application/x-tar', 
     'tgz' => array('application/x-tar', 'application/x-gzip-compressed'), 
     'z' => 'application/x-compress', 
     'xhtml' => 'application/xhtml+xml', 
     'xht' => 'application/xhtml+xml', 
     'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'), 
     'rar' => array('application/x-rar', 'application/rar', 'application/x-rar-compressed'), 
     'mid' => 'audio/midi', 
     'midi' => 'audio/midi', 
     'mpga' => 'audio/mpeg', 
     'mp2' => 'audio/mpeg', 
     'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'), 
     'aif' => array('audio/x-aiff', 'audio/aiff'), 
     'aiff' => array('audio/x-aiff', 'audio/aiff'), 
     'aifc' => 'audio/x-aiff', 
     'ram' => 'audio/x-pn-realaudio', 
     'rm' => 'audio/x-pn-realaudio', 
     'rpm' => 'audio/x-pn-realaudio-plugin', 
     'ra' => 'audio/x-realaudio', 
     'rv' => 'video/vnd.rn-realvideo', 
     'wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'), 
     'bmp' => array('image/bmp', 'image/x-bmp', 'image/x-bitmap', 'image/x-xbitmap', 'image/x-win-bitmap', 'image/x-windows-bmp', 'image/ms-bmp', 'image/x-ms-bmp', 'application/bmp', 'application/x-bmp', 'application/x-win-bitmap'), 
     'gif' => 'image/gif', 
     'jpeg' => array('image/jpeg', 'image/pjpeg'), 
     'jpg' => array('image/jpeg', 'image/pjpeg'), 
     'jpe' => array('image/jpeg', 'image/pjpeg'), 
     'jp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'j2k' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'jpf' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'jpg2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'jpx' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'jpm' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'mj2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'mjp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), 
     'png' => array('image/png', 'image/x-png'), 
     'tiff' => 'image/tiff', 
     'tif' => 'image/tiff', 
     'css' => array('text/css', 'text/plain'), 
     'html' => array('text/html', 'text/plain'), 
     'htm' => array('text/html', 'text/plain'), 
     'shtml' => array('text/html', 'text/plain'), 
     'txt' => 'text/plain', 
     'text' => 'text/plain', 
     'log' => array('text/plain', 'text/x-log'), 
     'rtx' => 'text/richtext', 
     'rtf' => 'text/rtf', 
     'xml' => array('application/xml', 'text/xml', 'text/plain'), 
     'xsl' => array('application/xml', 'text/xsl', 'text/xml'), 
     'mpeg' => 'video/mpeg', 
     'mpg' => 'video/mpeg', 
     'mpe' => 'video/mpeg', 
     'qt' => 'video/quicktime', 
     'mov' => 'video/quicktime', 
     'avi' => array('video/x-msvideo', 'video/msvideo', 'video/avi', 'application/x-troff-msvideo'), 
     'movie' => 'video/x-sgi-movie', 
     'doc' => array('application/msword', 'application/vnd.ms-office'), 
     'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword', 'application/x-zip'), 
     'dot' => array('application/msword', 'application/vnd.ms-office'), 
     'dotx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword'), 
     'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip'), 
     'word' => array('application/msword', 'application/octet-stream'), 
     'xl' => 'application/excel', 
     'eml' => 'message/rfc822', 
     'json' => array('application/json', 'text/json'), 
     'pem' => array('application/x-x509-user-cert', 'application/x-pem-file', 'application/octet-stream'), 
     'p10' => array('application/x-pkcs10', 'application/pkcs10'), 
     'p12' => 'application/x-pkcs12', 
     'p7a' => 'application/x-pkcs7-signature', 
     'p7c' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'), 
     'p7m' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'), 
     'p7r' => 'application/x-pkcs7-certreqresp', 
     'p7s' => 'application/pkcs7-signature', 
     'crt' => array('application/x-x509-ca-cert', 'application/x-x509-user-cert', 'application/pkix-cert'), 
     'crl' => array('application/pkix-crl', 'application/pkcs-crl'), 
     'der' => 'application/x-x509-ca-cert', 
     'kdb' => 'application/octet-stream', 
     'pgp' => 'application/pgp', 
     'gpg' => 'application/gpg-keys', 
     'sst' => 'application/octet-stream', 
     'csr' => 'application/octet-stream', 
     'rsa' => 'application/x-pkcs7', 
     'cer' => array('application/pkix-cert', 'application/x-x509-ca-cert'), 
     '3g2' => 'video/3gpp2', 
     '3gp' => array('video/3gp', 'video/3gpp'), 
     'mp4' => 'video/mp4', 
     'm4a' => 'audio/x-m4a', 
     'f4v' => array('video/mp4', 'video/x-f4v'), 
     'flv' => 'video/x-flv', 
     'webm' => 'video/webm', 
     'aac' => 'audio/x-acc', 
     'm4u' => 'application/vnd.mpegurl', 
     'm3u' => 'text/plain', 
     'xspf' => 'application/xspf+xml', 
     'vlc' => 'application/videolan', 
     'wmv' => array('video/x-ms-wmv', 'video/x-ms-asf'), 
     'au' => 'audio/x-au', 
     'ac3' => 'audio/ac3', 
     'flac' => 'audio/x-flac', 
     'ogg' => array('audio/ogg', 'video/ogg', 'application/ogg'), 
     'kmz' => array('application/vnd.google-earth.kmz', 'application/zip', 'application/x-zip'), 
     'kml' => array('application/vnd.google-earth.kml+xml', 'application/xml', 'text/xml'), 
     'ics' => 'text/calendar', 
     'ical' => 'text/calendar', 
     'zsh' => 'text/x-scriptzsh', 
     '7zip' => array('application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'), 
     'cdr' => array('application/cdr', 'application/coreldraw', 'application/x-cdr', 'application/x-coreldraw', 'image/cdr', 'image/x-cdr', 'zz-application/zz-winassoc-cdr'), 
     'wma' => array('audio/x-ms-wma', 'video/x-ms-asf'), 
     'jar' => array('application/java-archive', 'application/x-java-application', 'application/x-jar', 'application/x-compressed'), 
     'svg' => array('image/svg+xml', 'application/xml', 'text/xml'), 
     'vcf' => 'text/x-vcard', 
     'srt' => array('text/srt', 'text/plain'), 
     'vtt' => array('text/vtt', 'text/plain'), 
     'ico' => array('image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon'), 
     'odc' => 'application/vnd.oasis.opendocument.chart', 
     'otc' => 'application/vnd.oasis.opendocument.chart-template', 
     'odf' => 'application/vnd.oasis.opendocument.formula', 
     'otf' => 'application/vnd.oasis.opendocument.formula-template', 
     'odg' => 'application/vnd.oasis.opendocument.graphics', 
     'otg' => 'application/vnd.oasis.opendocument.graphics-template', 
     'odi' => 'application/vnd.oasis.opendocument.image', 
     'oti' => 'application/vnd.oasis.opendocument.image-template', 
     'odp' => 'application/vnd.oasis.opendocument.presentation', 
     'otp' => 'application/vnd.oasis.opendocument.presentation-template', 
     'ods' => 'application/vnd.oasis.opendocument.spreadsheet', 
     'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', 
     'odt' => 'application/vnd.oasis.opendocument.text', 
     'odm' => 'application/vnd.oasis.opendocument.text-master', 
     'ott' => 'application/vnd.oasis.opendocument.text-template', 
     'oth' => 'application/vnd.oasis.opendocument.text-web' 
    ); 

    foreach ($extensions as $key => $value) { 
     if (is_array($value)) { 
      foreach($value as $k) { 
       if ($k === $mime) { 
        return $key; 
       } 
      } 
     } 
     else { 
      if ($value === $mime) { 
       return $key; 
      } 
     } 
    } 
    return 'unknown'; 
} 
Смежные вопросы