Среда, 02.07.2025, 08:11
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
URLUploader.as
defaultNickДата: Пятница, 29.05.2020, 01:32 | Сообщение # 1
Генерал-майор
Группа: Администраторы
Сообщений: 311
Репутация: 0
Статус: Offline
package simplify {

import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.net.URLRequestHeader;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.utils.ByteArray;

/**
* Загрузка файлов на сервер согласно http://ru.wikipedia.org/wiki/Multipart/form-data
*
* @example
* var uploader:URLUploader = new URLUploader();
* uploader.addFile(byteArray, "file", "avatar.png");
* uploader.addVariable("token", "48dcsa");
* uploader.upload("http://server.com/changeAvatar.php");
* //затем подписываемся на события как у стандартного URLLoader
*
*
* @author rzer & reraider
* @version 0.1
*/
public class URLUploader extends URLLoader {

private var request:URLRequest;
private var parts:Array = [];

private static const BOUNDARY:String = "----------cH2gL6ei4Ef1gL6GI3Ij5EfGGf1Ef1";
private static const CRLF:String = "\r\n";
private static const HYPHENS:String = "--";

public var haveFiles:Boolean = false;


public function addFile(file:ByteArray, name:String = "file", fileName:String = "sample.obj"):void {

haveFiles = true;

var extension:String = fileName.split(".").pop();
var contentType:String = getMimeType(extension);

if (!contentType) {
contentType = "application/octet-stream";
}

var data:ByteArray = new ByteArray();
data.writeUTFBytes(HYPHENS + BOUNDARY + CRLF);
data.writeUTFBytes("Content-Disposition: form-data; name=" + name + "; filename=" + fileName + CRLF);
data.writeUTFBytes("Content-Type: " + contentType + CRLF + CRLF);
data.writeBytes(file);
data.writeUTFBytes(CRLF);

parts.push(data);
}

public function addVariable(name:String, value:String):void {

var data:ByteArray = new ByteArray();
data.writeUTFBytes(HYPHENS + BOUNDARY + CRLF);
data.writeUTFBytes("Content-Disposition: form-data; name=" + name + CRLF + CRLF);
data.writeUTFBytes(value);
data.writeUTFBytes(CRLF);

parts.push(data);

}

public function upload(path:String):void {

var bytes:ByteArray = new ByteArray();

for (var i:int = 0; i < parts.length; i++ ) {
var part:ByteArray = parts[i];
bytes.writeBytes(part);
}

bytes.writeUTFBytes(HYPHENS + BOUNDARY + HYPHENS);

request = new URLRequest();

request.url = path;
request.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + BOUNDARY));
dataFormat = URLLoaderDataFormat.BINARY;
request.method = URLRequestMethod.POST;
request.data = bytes;

this.load(request);
}

//////////////////////////// STATIC

private static var types:Array =
[["application/andrew-inset","ez"],
["application/atom+xml","atom"],
["application/mac-binhex40","hqx"],
["application/mac-compactpro","cpt"],
["application/mathml+xml","mathml"],
["application/msword","doc"],
["application/octet-stream","bin","dms","lha","lzh","exe","class","so","dll","dmg"],
["application/oda","oda"],
["application/ogg","ogg"],
["application/pdf","pdf"],
["application/postscript","ai","eps","ps"],
["application/rdf+xml","rdf"],
["application/smil","smi","smil"],
["application/srgs","gram"],
["application/srgs+xml","grxml"],
["application/vnd.adobe.apollo-application-installer-package+zip","air"],
["application/vnd.mif","mif"],
["application/vnd.mozilla.xul+xml","xul"],
["application/vnd.ms-excel","xls"],
["application/vnd.ms-powerpoint","ppt"],
["application/vnd.rn-realmedia","rm"],
["application/vnd.wap.wbxml","wbxml"],
["application/vnd.wap.wmlc","wmlc"],
["application/vnd.wap.wmlscriptc","wmlsc"],
["application/voicexml+xml","vxml"],
["application/x-bcpio","bcpio"],
["application/x-cdlink","vcd"],
["application/x-chess-pgn","pgn"],
["application/x-cpio","cpio"],
["application/x-csh","csh"],
["application/x-director","dcr","dir","dxr"],
["application/x-dvi","dvi"],
["application/x-futuresplash","spl"],
["application/x-gtar","gtar"],
["application/x-hdf","hdf"],
["application/x-javascript","js"],
["application/x-koan","skp","skd","skt","skm"],
["application/x-latex","latex"],
["application/x-netcdf","nc","cdf"],
["application/x-sh","sh"],
["application/x-shar","shar"],
["application/x-shockwave-flash","swf"],
["application/x-stuffit","sit"],
["application/x-sv4cpio","sv4cpio"],
["application/x-sv4crc","sv4crc"],
["application/x-tar","tar"],
["application/x-tcl","tcl"],
["application/x-tex","tex"],
["application/x-texinfo","texinfo","texi"],
["application/x-troff","t","tr","roff"],
["application/x-troff-man","man"],
["application/x-troff-me","me"],
["application/x-troff-ms","ms"],
["application/x-ustar","ustar"],
["application/x-wais-source","src"],
["application/xhtml+xml","xhtml","xht"],
["application/xml","xml","xsl"],
["application/xml-dtd","dtd"],
["application/xslt+xml","xslt"],
["application/zip","zip"],
["audio/basic","au","snd"],
["audio/midi","mid","midi","kar"],
["audio/mp4","f4a"],
["audio/mp4","f4b"],
["audio/mpeg","mp3","mpga","mp2"],
["audio/x-aiff","aif","aiff","aifc"],
["audio/x-mpegurl","m3u"],
["audio/x-pn-realaudio","ram","ra"],
["audio/x-wav","wav"],
["chemical/x-pdb","pdb"],
["chemical/x-xyz","xyz"],
["image/bmp","bmp"],
["image/cgm","cgm"],
["image/gif","gif"],
["image/ief","ief"],
["image/jpeg","jpg","jpeg","jpe"],
["image/png","png"],
["image/svg+xml","svg"],
["image/tiff","tiff","tif"],
["image/vnd.djvu","djvu","djv"],
["image/vnd.wap.wbmp","wbmp"],
["image/x-cmu-raster","ras"],
["image/x-icon","ico"],
["image/x-portable-anymap","pnm"],
["image/x-portable-bitmap","pbm"],
["image/x-portable-graymap","pgm"],
["image/x-portable-pixmap","ppm"],
["image/x-rgb","rgb"],
["image/x-xbitmap","xbm"],
["image/x-xpixmap","xpm"],
["image/x-xwindowdump","xwd"],
["model/iges","igs","iges"],
["model/mesh","msh","mesh","silo"],
["model/vrml","wrl","vrml"],
["text/calendar","ics","ifb"],
["text/css","css"],
["text/html","html","htm"],
["text/plain","txt","asc"],
["text/richtext","rtx"],
["text/rtf","rtf"],
["text/sgml","sgml","sgm"],
["text/tab-separated-values","tsv"],
["text/vnd.wap.wml","wml"],
["text/vnd.wap.wmlscript","wmls"],
["text/x-setext","etx"],
["video/mp4","f4v"],
["video/mp4","f4p"],
["video/mpeg","mpg","mpeg","mpe"],
["video/quicktime","mov","qt"],
["video/vnd.mpegurl","m4u","mxu"],
["video/x-flv","flv"],
["video/x-msvideo","avi"],
["video/x-sgi-movie","movie"],
["x-conference/x-cooltalk", "ice"]];

/**
* Возвращает mymetype в зависимости от расширения
*/
public static function getMimeType(extension:String):String
{
extension = extension.toLocaleLowerCase();
for each (var a:Array in types)
{
for each (var b:String in a)
{
if (b == extension)
{
return a[0];
}
}
}
return null;
}

/**
* Возвращает наиболее используемое расширение файла в зависимости от mimeType
*/
public static function getExtension(mimetype:String):String
{
mimetype = mimetype.toLocaleLowerCase();
for each (var a:Array in types)
{
if (a[0] == mimetype)
{
return a[1];
}
}
return null;
}

/**
* Добавляем mimetype в карту
*/
public static function addMimeType(mimetype:String, extensions:Array):void
{
var newType:Array = [mimetype];
for each (var a:String in extensions)
{
newType.push(a);
}
types.push(newType);
}

}

}
 
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz | Sitemap | Sitemap-Forum