android文件FileProvider共享相关

1. androidN 开始,禁止使用file://开头Uri,要求使用Fileprovider 提供的Uri,该使用方法较多,就不一一列举,给出谷歌官方API使用地址。

FileProvider API使用介绍:

https://developer.android.com/reference/android/support/v4/content/FileProvider.html

文件共享谷歌官方Tranning

https://developer.android.com/training/secure-file-sharing/setup-sharing.html


2. 关于文件共享发送方按照如上配置即可,但是在第三方应用接受到共享的Intent数据时,怎么处理?

  通过Intent获取content Uri,根据该Uri可以查询数据库。

  注意; 查询只有两个列值 OpenableColumns.DISPLAY_NAME ,OpenableColumns.SIZE

 当然,你还可以通过 ContentResolver().getType(uri);获取文件mimType。


上代码:

 // 该方法主要是在接受到分享的Intent后处理,并获取文件

	public void handleUriMethod(Intent intent){

		if(intent == null){
			return;
		}
		uri = (Uri)intent.getData();
		mimeType = intent.getType();


		if(uri==null){
			Log.d("xuehao","    handleUriMethod.... uri ==null");
			uri = (Uri)intent.getParcelableExtra(Intent.EXTRA_STREAM);
		}
		Log.d("xuehao","    handleUriMethod.... uri ="+uri );

		ContentResolver cr =   getContentResolver();
		Cursor cur =null;

		if(cr!=null && uri!=null){
			 cur =cr.query(uri, null, null, null, null);
		}

		int count = 0;

		File file;
		if(cur!=null){
			Log.d("xuehao","    handleUriMethod.... mimeType ="+mimeType +" au="+uri.getAuthority());
			count = cur.getCount();
		    int nameIndex = cur.getColumnIndex(OpenableColumns.DISPLAY_NAME);
		    int sizeIndex = cur.getColumnIndex(OpenableColumns.SIZE);
		    int colCount = cur.getColumnCount();

		    cur.moveToFirst();
			String name = cur.getString(nameIndex);
			String size =Long.toString(cur.getLong(sizeIndex))+" B";
			String mimeType = getContentResolver().getType(uri);

			Log.d("xuehao","name=" +name+" size="+size +" colCount ="+colCount+" cursor="+cur.toString());


			FileInputStream is = null;
			long length = 0;
			length =cur.getLong(cur.getColumnIndex(OpenableColumns.SIZE));
			 try {
	                // We've found that content providers don't always have the
	                // right size in _OpenableColumns.SIZE
	                // As a second source of getting the correct file length,
	                // get a file descriptor and get the stat length
	                AssetFileDescriptor fd = getContentResolver().openAssetFileDescriptor(uri, "r");
	                long statLength = fd.getLength();
	                if (length != statLength && statLength > 0) {
	                    Log.e("xuehao", "Content provider length is wrong (" + Long.toString(length) +
	                            "), using stat length (" + Long.toString(statLength) + ")");
	                    length = statLength;
	                }

	                try {
	                    // This creates an auto-closing input-stream, so
	                    // the file descriptor will be closed whenever the InputStream
	                    // is closed.
	                    is = fd.createInputStream();

	                    // If the database doesn't contain the file size, get the size
	                    // by reading through the entire stream
	                    if (length == 0) {
	                        length = FileUtil.getStreamSize(is);
	                        Log.w("xuehao", "File length not provided. Length from stream = "
	                                   + length);
	                        // Reset the stream
	                        fd = getContentResolver().openAssetFileDescriptor(uri, "r");
	                        is = fd.createInputStream();
	                    }
	                } catch (IOException e) {
	                    try {
	                        fd.close();
	                    } catch (IOException e2) {
	                        // Ignore
	                    }
	                }
	         } catch (FileNotFoundException e) {
	                // Ignore
	         }
			 if (is == null) {
		            try {
		                is = (FileInputStream) getContentResolver().openInputStream(uri);

		                // If the database doesn't contain the file size, get the size
		                // by reading through the entire stream
		                if (length == 0) {
		                    length = FileUtil.getStreamSize(is);
		                    // Reset the stream
		                    is = (FileInputStream) getContentResolver().openInputStream(uri);
		                }
		            } catch (FileNotFoundException e) {
		                return ;
		            } catch (IOException e) {
		                return ;
		            }
		        }

		        if (length == 0) {
		            Log.e("xuehao", "Could not determine size of file");
		            return ;
		        }

		        ShareSendFileInfo si = new ShareSendFileInfo(name,mimeType , length, is, 0);

		        Log.d("xuehao","    handleUriMethod... si="+si );

		        try {
					byte[] data = FileUtil.inputStreamToByte(is);
					for(byte bt: data){
						// Log.d("xuehao","    handleUriMethod... bt="+bt );
					}


					File newFile = new File(this.getFilesDir(),"new_"+name);
					Log.d("xuehao","    handleUriMethod... newFile" );
					newFile.createNewFile();
					newFile.setExecutable(true,false);
					newFile.setReadable(true,false);
					newFile.setWritable(true,false);

					FileUtil.scanFile(this, newFile) ;
					boolean isext =  newFile.exists();
					Log.d("xuehao","    handleUriMethod...1 isext="+isext );
					// n
					FileUtil.byteToFile(data,newFile,this );
					boolean isext2 =  newFile.exists();
					Log.d("xuehao","    handleUriMethod...2 isext="+isext2 );
					Log.d("xuehao","    to startActivity  newFile="+newFile.getAbsolutePath()+" size="+ newFile.length());

					Intent mintent = FileUtil.getIntentByFileType(mimeType, newFile);
					if(mintent!=null)
						startActivity(mintent);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					Log.d("xuehao","    handleUriMethod...IOException " );
					e.printStackTrace();
				}

		}else{
			Log.d("xuehao","    handleUriMethod... null.");
		}

	}




文件处理工具类:

package util;

import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class FileUtil {


    public static final byte[] inputStreamToByte(FileInputStream inStream)
            throws IOException {
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[100];
        int rc = 0;
        while ((rc = inStream.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        byte[] in2b = swapStream.toByteArray();
        return in2b;
    }


    public static final FileInputStream byteToInStream(byte[] buffer){
    	InputStream sbs = new ByteArrayInputStream(buffer);
    	return (FileInputStream) sbs;
    }

    // 将 byte[]二进制数据转化为 File 文件
    @SuppressWarnings("resource")
	public static void byteToFile(byte[] buffer, File newFile,Context context){
    	FileOutputStream  output = null;
    	BufferedOutputStream bufferedOutput = null;

		try {
			output = new FileOutputStream(newFile);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

    	bufferedOutput = new BufferedOutputStream(output);
    	try {
			bufferedOutput.write(buffer);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	finally{
    		if(bufferedOutput!=null){
    			try {
					bufferedOutput.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
    		if(output!=null){
    			try {
					output.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
    	}


    }
     // 更新文件夹
    public static void scanDir(Context context, File dir) {
        Log.i("xuehao","send broadcast to scan dir = " + dir);

        String path = dir.getPath();
        Intent intent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_DIR");
        Bundle bundle = new Bundle();
        bundle.putString("scan_dir_path", path);
        intent.putExtras(bundle);
        context.sendBroadcast(intent);

    }


    public static void scanFile(Context context, File file) {
        Log.i("xuehao", "send broadcast to scan file");
        android.media.MediaScannerConnection.scanFile(context.getApplicationContext(),
                new String[]{ file.getAbsolutePath() }, null, null);
    }

    public static long getStreamSize(FileInputStream is) throws IOException {
        long length = 0;
        byte unused[] = new byte[4096];
        while (is.available() > 0) {
            length += is.read(unused, 0, 4096);
        }
        return length;
    }
    public static Intent getIntentByFileType( String mimeType, File file) {
        if (file == null  ) {
        	Log.d("xuehao", " null intent 1");
            return null;
        }else if(!file.exists()){
        	Log.d("xuehao", " null intent 2");
            return null;
        }else if(!file.canRead()){
        	Log.d("xuehao", " null intent 3");
            return null;
        }
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction(Intent.ACTION_VIEW);
        String type = getMIMEType(file,mimeType);
        Uri muri =Uri.fromFile(file);
        Log.d("xuehao", " type="+type+"  muri= "+muri);
        intent.setDataAndType(muri, type);
        return intent;
    }


    private static String getMIMEType(File file,String mimeType){
     	String type="*";
     	String fName = file.getName();
     	final int dotIndex = fName.lastIndexOf(".");
     	String  extensionName = getExtensionName(fName, dotIndex);

     	//在MIME和文件类型的匹配表中找到对应的MIME类型。
     	for(int i=0;i<MIME_MapTable.length;i++){
     		if(extensionName.equals(MIME_MapTable[i][0]))
     		type = MIME_MapTable[i][1];
     	}
     	if(mimeType!=null){
     		return mimeType;
     	}
     	return type;
     }
    private static String getExtensionName(String fileName, int dotIndex) {
        if (fileName != null && (fileName.length() > 0)) {
            if ((dotIndex > -1) && (dotIndex < (fileName.length() - 1))) {
                return fileName.substring(dotIndex);
            }
        }
        return fileName;
    }
    private static final String[][] MIME_MapTable = {
        //{后缀名,MIME类型}
        {"3gp", "video/3gpp"},
        {"aab", "application/x-authoware-bin"},
        {"aam", "application/x-authoware-map"},
        {"aas", "application/x-authoware-seg"},
        {"ai", "application/postscript"},
        {"aif", "audio/x-aiff"},
        {"aifc", "audio/x-aiff"},
        {"aiff", "audio/x-aiff"},
        {"als", "audio/X-Alpha5"},
        {"amc", "application/x-mpeg"},
        {"ani", "application/octet-stream"},
        {"apk", "application/vnd.android.package-archive"},
        {"asc", "text/plain"},
        {"asd", "application/astound"},
        {"asf", "video/x-ms-asf"},
        {"asn", "application/astound"},
        {"asp", "application/x-asap"},
        {"asx", "video/x-ms-asf"},
        {"au", "audio/basic"},
        {"avb", "application/octet-stream"},
        {"avi", "video/x-msvideo"},
        {"awb", "audio/amr-wb"},
        {"bcpio", "application/x-bcpio"},
        {"bin", "application/octet-stream"},
        {"bld", "application/bld"},
        {"bld2", "application/bld2"},
        {"bmp", "image/bmp"},
        {"bpk", "application/octet-stream"},
        {"bz2", "application/x-bzip2"},
        {"c", "text/plain"},
        {"cal", "image/x-cals"},
        {"ccn", "application/x-cnc"},
        {"cco", "application/x-cocoa"},
        {"cdf", "application/x-netcdf"},
        {"cgi", "magnus-internal/cgi"},
        {"chat", "application/x-chat"},
        {"class", "application/octet-stream"},
        {"clp", "application/x-msclip"},
        {"cmx", "application/x-cmx"},
        {"co", "application/x-cult3d-object"},
        {"cod", "image/cis-cod"},
        {"conf", "text/plain"},
        {"cpio", "application/x-cpio"},
        {"cpp", "text/plain"},
        {"cpt", "application/mac-compactpro"},
        {"crd", "application/x-mscardfile"},
        {"csh", "application/x-csh"},
        {"csm", "chemical/x-csml"},
        {"csml", "chemical/x-csml"},
        {"css", "text/css"},
        {"cur", "application/octet-stream"},
        {"dcm", "x-lml/x-evm"},
        {"dcr", "application/x-director"},
        {"dcx", "image/x-dcx"},
        {"dhtml", "text/html"},
        {"dir", "application/x-director"},
        {"dll", "application/octet-stream"},
        {"dmg", "application/octet-stream"},
        {"dms", "application/octet-stream"},
        {"doc", "application/msword"},
        {"docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
        {"dot", "application/x-dot"},
        {"dvi", "application/x-dvi"},
        {"dwf", "drawing/x-dwf"},
        {"dwg", "application/x-autocad"},
        {"dxf", "application/x-autocad"},
        {"dxr", "application/x-director"},
        {"ebk", "application/x-expandedbook"},
        {"emb", "chemical/x-embl-dl-nucleotide"},
        {"embl", "chemical/x-embl-dl-nucleotide"},
        {"eps", "application/postscript"},
        {"eri", "image/x-eri"},
        {"es", "audio/echospeech"},
        {"esl", "audio/echospeech"},
        {"etc", "application/x-earthtime"},
        {"etx", "text/x-setext"},
        {"evm", "x-lml/x-evm"},
        {"evy", "application/x-envoy"},
        {"exe", "application/octet-stream"},
        {"fh4", "image/x-freehand"},
        {"fh5", "image/x-freehand"},
        {"fhc", "image/x-freehand"},
        {"fif", "image/fif"},
        {"fm", "application/x-maker"},
        {"fpx", "image/x-fpx"},
        {"fvi", "video/isivideo"},
        {"gau", "chemical/x-gaussian-input"},
        {"gca", "application/x-gca-compressed"},
        {"gdb", "x-lml/x-gdb"},
        {"gif", "image/gif"},
        {"gps", "application/x-gps"},
        {"gtar", "application/x-gtar"},
        {"gz", "application/x-gzip"},
        {"h", "text/plain"},
        {"hdf", "application/x-hdf"},
        {"hdm", "text/x-hdml"},
        {"hdml", "text/x-hdml"},
        {"hlp", "application/winhlp"},
        {"hqx", "application/mac-binhex40"},
        {"htm", "text/html"},
        {"html", "text/html"},
        {"hts", "text/html"},
        {"ice", "x-conference/x-cooltalk"},
        {"ico", "application/octet-stream"},
        {"ief", "image/ief"},
        {"ifm", "image/gif"},
        {"ifs", "image/ifs"},
        {"imy", "audio/melody"},
        {"ins", "application/x-NET-Install"},
        {"ips", "application/x-ipscript"},
        {"ipx", "application/x-ipix"},
        {"it", "audio/x-mod"},
        {"itz", "audio/x-mod"},
        {"ivr", "i-world/i-vrml"},
        {"j2k", "image/j2k"},
        {"jad", "text/vnd.sun.j2me.app-descriptor"},
        {"jam", "application/x-jam"},
        {"jar", "application/java-archive"},
        {"java", "text/plain"},
        {"jnlp", "application/x-java-jnlp-file"},
        {"jpe", "image/jpeg"},
        {"jpeg", "image/jpeg"},
        {"jpg", "image/jpeg"},
        {"jpz", "image/jpeg"},
        {"js", "application/x-javascript"},
        {"jwc", "application/jwc"},
        {"kjx", "application/x-kjx"},
        {"lak", "x-lml/x-lak"},
        {"latex", "application/x-latex"},
        {"lcc", "application/fastman"},
        {"lcl", "application/x-digitalloca"},
        {"lcr", "application/x-digitalloca"},
        {"lgh", "application/lgh"},
        {"lha", "application/octet-stream"},
        {"lml", "x-lml/x-lml"},
        {"lmlpack", "x-lml/x-lmlpack"},
        {"log", "text/plain"},
        {"lsf", "video/x-ms-asf"},
        {"lsx", "video/x-ms-asf"},
        {"lzh", "application/x-lzh"},
        {"m13", "application/x-msmediaview"},
        {"m14", "application/x-msmediaview"},
        {"m15", "audio/x-mod"},
        {"m3u", "audio/x-mpegurl"},
        {"m3url", "audio/x-mpegurl"},
        {"m4a",    "audio/mp4a-latm"},
        {"m4b",    "audio/mp4a-latm"},
        {"m4p",    "audio/mp4a-latm"},
        {"m4u",    "video/vnd.mpegurl"},
        {"m4v",    "video/x-m4v"},
        {"ma1", "audio/ma1"},
        {"ma2", "audio/ma2"},
        {"ma3", "audio/ma3"},
        {"ma5", "audio/ma5"},
        {"man", "application/x-troff-man"},
        {"map", "magnus-internal/imagemap"},
        {"mbd", "application/mbedlet"},
        {"mct", "application/x-mascot"},
        {"mdb", "application/x-msaccess"},
        {"mdz", "audio/x-mod"},
        {"me", "application/x-troff-me"},
        {"mel", "text/x-vmel"},
        {"mi", "application/x-mif"},
        {"mid", "audio/midi"},
        {"midi", "audio/midi"},
        {"mif", "application/x-mif"},
        {"mil", "image/x-cals"},
        {"mio", "audio/x-mio"},
        {"mmf", "application/x-skt-lbs"},
        {"mng", "video/x-mng"},
        {"mny", "application/x-msmoney"},
        {"moc", "application/x-mocha"},
        {"mocha", "application/x-mocha"},
        {"mod", "audio/x-mod"},
        {"mof", "application/x-yumekara"},
        {"mol", "chemical/x-mdl-molfile"},
        {"mop", "chemical/x-mopac-input"},
        {"mov", "video/quicktime"},
        {"movie", "video/x-sgi-movie"},
        {"mp2", "audio/x-mpeg"},
        {"mp3", "audio/x-mpeg"},
        {"mp4", "video/mp4"},
        {"mpc", "application/vnd.mpohun.certificate"},
        {"mpe", "video/mpeg"},
        {"mpeg", "video/mpeg"},
        {"mpg video/mpeg"},
        {"mpg4", "video/mp4"},
        {"mpga", "audio/mpeg"},
        {"mpn", "application/vnd.mophun.application"},
        {"mpp", "application/vnd.ms-project"},
        {"mps", "application/x-mapserver"},
        {"mrl", "text/x-mrml"},
        {"mrm", "application/x-mrm"},
        {"ms", "application/x-troff-ms"},
        {"msg",     "application/vnd.ms-outlook"},
        {"mts", "application/metastream"},
        {"mtx", "application/metastream"},
        {"mtz", "application/metastream"},
        {"mzv", "application/metastream"},
        {"nar", "application/zip"},
        {"nbmp", "image/nbmp"},
        {"nc", "application/x-netcdf"},
        {"ndb", "x-lml/x-ndb"},
        {"ndwn", "application/ndwn"},
        {"nif", "application/x-nif"},
        {"nmz", "application/x-scream"},
        {"nokia-op-logo", "image/vnd.nok-oplogo-color"},
        {"npx", "application/x-netfpx"},
        {"nsnd", "audio/nsnd"},
        {"nva", "application/x-neva1"},
        {"oda", "application/oda"},
        {"ogg", "audio/ogg"},
        {"oom", "application/x-AtlasMate-Plugin"},
        {"pac", "audio/x-pac"},
        {"pae", "audio/x-epac"},
        {"pan", "application/x-pan"},
        {"pbm", "image/x-portable-bitmap"},
        {"pcx", "image/x-pcx"},
        {"pda", "image/x-pda"},
        {"pdb", "chemical/x-pdb"},
        {"pdf", "application/pdf"},
        {"pfr", "application/font-tdpfr"},
        {"pgm", "image/x-portable-graymap"},
        {"pict", "image/x-pict"},
        {"pm", "application/x-perl"},
        {"pmd", "application/x-pmd"},
        {"png", "image/png"},
        {"pnm", "image/x-portable-anymap"},
        {"pnz", "image/png"},
        {"pot", "application/vnd.ms-powerpoint"},
        {"ppm", "image/x-portable-pixmap"},
        {"pps", "application/vnd.ms-powerpoint"},
        {"ppt", "application/vnd.ms-powerpoint"},
        {"pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
        {"pqf", "application/x-cprplayer"},
        {"pqi", "application/cprplayer"},
        {"prc", "application/x-prc"},
        {"prop", "text/plain"},
        {"proxy", "application/x-ns-proxy-autoconfig"},
        {"ps", "application/postscript"},
        {"ptlk", "application/listenup"},
        {"pub", "application/x-mspublisher"},
        {"pvx", "video/x-pv-pvx"},
        {"qcp", "audio/vnd.qcelp"},
        {"qt", "video/quicktime"},
        {"qti", "image/x-quicktime"},
        {"qtif", "image/x-quicktime"},
        {"r3t", "text/vnd.rn-realtext3d"},
        {"ra", "audio/x-pn-realaudio"},
        {"ram", "audio/x-pn-realaudio"},
        {"rar", "application/x-rar-compressed"},
        {"ras", "image/x-cmu-raster"},
        {"rc", "text/plain"},
        {"rdf", "application/rdf+xml"},
        {"rf", "image/vnd.rn-realflash"},
        {"rgb", "image/x-rgb"},
        {"rlf", "application/x-richlink"},
        {"rm", "audio/x-pn-realaudio"},
        {"rmf", "audio/x-rmf"},
        {"rmm", "audio/x-pn-realaudio"},
        {"rmvb", "audio/x-pn-realaudio"},
        {"rnx", "application/vnd.rn-realplayer"},
        {"roff", "application/x-troff"},
        {"rp", "image/vnd.rn-realpix"},
        {"rpm", "audio/x-pn-realaudio-plugin"},
        {"rt", "text/vnd.rn-realtext"},
        {"rte", "x-lml/x-gps"},
        {"rtf", "application/rtf"},
        {"rtg", "application/metastream"},
        {"rtx", "text/richtext"},
        {"rv", "video/vnd.rn-realvideo"},
        {"rwc", "application/x-rogerwilco"},
        {"s3m", "audio/x-mod"},
        {"s3z", "audio/x-mod"},
        {"sca", "application/x-supercard"},
        {"scd", "application/x-msschedule"},
        {"sdf", "application/e-score"},
        {"sea", "application/x-stuffit"},
        {"sgm", "text/x-sgml"},
        {"sgml", "text/x-sgml"},
        {"sh", "application/x-sh"},
        {"shar", "application/x-shar"},
        {"shtml", "magnus-internal/parsed-html"},
        {"shw", "application/presentations"},
        {"si6", "image/si6"},
        {"si7", "image/vnd.stiwap.sis"},
        {"si9", "image/vnd.lgtwap.sis"},
        {"sis", "application/vnd.symbian.install"},
        {"sit", "application/x-stuffit"},
        {"skd", "application/x-Koan"},
        {"skm", "application/x-Koan"},
        {"skp", "application/x-Koan"},
        {"skt", "application/x-Koan"},
        {"slc", "application/x-salsa"},
        {"smd", "audio/x-smd"},
        {"smi", "application/smil"},
        {"smil", "application/smil"},
        {"smp", "application/studiom"},
        {"smz", "audio/x-smd"},
        {"snd", "audio/basic"},
        {"spc", "text/x-speech"},
        {"spl", "application/futuresplash"},
        {"spr", "application/x-sprite"},
        {"sprite", "application/x-sprite"},
        {"spt", "application/x-spt"},
        {"src", "application/x-wais-source"},
        {"stk", "application/hyperstudio"},
        {"stm", "audio/x-mod"},
        {"sv4cpio", "application/x-sv4cpio"},
        {"sv4crc", "application/x-sv4crc"},
        {"svf", "image/vnd"},
        {"svg", "image/svg-xml"},
        {"svh", "image/svh"},
        {"svr", "x-world/x-svr"},
        {"swf", "application/x-shockwave-flash"},
        {"swfl", "application/x-shockwave-flash"},
        {"t", "application/x-troff"},
        {"tad", "application/octet-stream"},
        {"talk", "text/x-speech"},
        {"tar", "application/x-tar"},
        {"taz", "application/x-tar"},
        {"tbp", "application/x-timbuktu"},
        {"tbt", "application/x-timbuktu"},
        {"tcl", "application/x-tcl"},
        {"tex", "application/x-tex"},
        {"texi", "application/x-texinfo"},
        {"texinfo", "application/x-texinfo"},
        {"tgz", "application/x-tar"},
        {"thm", "application/vnd.eri.thm"},
        {"tif", "image/tiff"},
        {"tiff", "image/tiff"},
        {"tki", "application/x-tkined"},
        {"tkined", "application/x-tkined"},
        {"toc", "application/toc"},
        {"toy", "image/toy"},
        {"tr", "application/x-troff"},
        {"trk", "x-lml/x-gps"},
        {"trm", "application/x-msterminal"},
        {"tsi", "audio/tsplayer"},
        {"tsp", "application/dsptype"},
        {"tsv", "text/tab-separated-values"},
        {"tsv", "text/tab-separated-values"},
        {"ttf", "application/octet-stream"},
        {"ttz", "application/t-time"},
        {"txt", "text/plain"},
        {"ult", "audio/x-mod"},
        {"ustar", "application/x-ustar"},
        {"uu", "application/x-uuencode"},
        {"uue", "application/x-uuencode"},
        {"vcd", "application/x-cdlink"},
        {"vcf", "text/x-vcard"},
        {"vdo", "video/vdo"},
        {"vib", "audio/vib"},
        {"viv", "video/vivo"},
        {"vivo", "video/vivo"},
        {"vmd", "application/vocaltec-media-desc"},
        {"vmf", "application/vocaltec-media-file"},
        {"vmi", "application/x-dreamcast-vms-info"},
        {"vms", "application/x-dreamcast-vms"},
        {"vox", "audio/voxware"},
        {"vqe", "audio/x-twinvq-plugin"},
        {"vqf", "audio/x-twinvq"},
        {"vql", "audio/x-twinvq"},
        {"vre", "x-world/x-vream"},
        {"vrml", "x-world/x-vrml"},
        {"vrt", "x-world/x-vrt"},
        {"vrw", "x-world/x-vream"},
        {"vts", "workbook/formulaone"},
        {"wav", "audio/x-wav"},
        {"wax", "audio/x-ms-wax"},
        {"wbmp", "image/vnd.wap.wbmp"},
        {"web", "application/vnd.xara"},
        {"wi", "image/wavelet"},
        {"wis", "application/x-InstallShield"},
        {"wm", "video/x-ms-wm"},
        {"wma", "audio/x-ms-wma"},
        {"wmd", "application/x-ms-wmd"},
        {"wmf", "application/x-msmetafile"},
        {"wml", "text/vnd.wap.wml"},
        {"wmlc", "application/vnd.wap.wmlc"},
        {"wmls", "text/vnd.wap.wmlscript"},
        {"wmlsc", "application/vnd.wap.wmlscriptc"},
        {"wmlscript", "text/vnd.wap.wmlscript"},
        {"wmv", "audio/x-ms-wmv"},
        {"wmx", "video/x-ms-wmx"},
        {"wmz", "application/x-ms-wmz"},
        {"wpng", "image/x-up-wpng"},
        {"wps", "application/vnd.ms-works"},
        {"wpt", "x-lml/x-gps"},
        {"wri", "application/x-mswrite"},
        {"wrl", "x-world/x-vrml"},
        {"wrz", "x-world/x-vrml"},
        {"ws", "text/vnd.wap.wmlscript"},
        {"wsc", "application/vnd.wap.wmlscriptc"},
        {"wv", "video/wavelet"},
        {"wvx", "video/x-ms-wvx"},
        {"wxl", "application/x-wxl"},
        {"x-gzip", "application/x-gzip"},
        {"xar", "application/vnd.xara"},
        {"xbm", "image/x-xbitmap"},
        {"xdm", "application/x-xdma"},
        {"xdma", "application/x-xdma"},
        {"xdw", "application/vnd.fujixerox.docuworks"},
        {"xht", "application/xhtml+xml"},
        {"xhtm", "application/xhtml+xml"},
        {"xhtml", "application/xhtml+xml"},
        {"xla", "application/vnd.ms-excel"},
        {"xlc", "application/vnd.ms-excel"},
        {"xll", "application/x-excel"},
        {"xlm", "application/vnd.ms-excel"},
        {"xls", "application/vnd.ms-excel"},
        {"xlt", "application/vnd.ms-excel"},
        {"xlw", "application/vnd.ms-excel"},
        {"xlsx",      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
        {"xm", "audio/x-mod"},
        {"xml", "text/xml"},
        {"xmz", "audio/x-mod"},
        {"xpi", "application/x-xpinstall"},
        {"xpm", "image/x-xpixmap"},
        {"xsit", "text/xml"},
        {"xsl", "text/xml"},
        {"xul", "text/xul"},
        {"xwd", "image/x-xwindowdump"},
        {"xyz", "chemical/x-pdb"},
        {"yz1", "application/x-yz1"},
        {"z", "application/x-compress"},
        {"zac", "application/x-zaurus-zac"},
        {"zip", "application/zip"},
        {"", "*/*"}
    };
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值