PC 측에 업로드되는 대부분의 파일은 플러그인을 사용합니다. 플래시를 도입해도 문제가 되지 않습니다. 그러나 모바일 측에서 여전히 다양한 중복 플러그인을 사용한다면 프로젝트가 필요하게 될 것입니다. H5에는 이미 관련 인터페이스가 있으므로 이미지 업로드 기능을 갖기 위해 호환성도 좋습니다. 물론 구현 시 H5를 사용하는 것이 우선입니다.
사용된 주요 기술은 다음과 같습니다.
아약스
파일리더
양식데이터
HTML 구조:
XML/HTML 코드클립보드에 콘텐츠 복사
-
<div class="카메라 영역">
-
<form enctype="multipart/ 양식 데이터" 방법="게시물">
-
<입력 유형="파일" 이름="fileToUpload" 클래스="fileToUpload" 수락="image/*" 캡쳐="카메라"/>
-
<div class="업로드- 진행률"><스팬>스팬>div>
-
양식>
-
<div class="thumb" >div>
-
div>
-
패키지 upload.js는 zepto에 따라 다릅니다
JavaScript 코드클립보드에 콘텐츠 복사
-
(기능($) {
-
$.extend($.fn, {
-
fileUpload: 기능(선택) {
-
이.each(함수() {
-
var $self = $(이것);
-
var doms = {
-
"fileToUpload": $self.find(".fileToUpload"),
-
"thumb": $self.find(".thumb"),
-
"진행": $self.find(".upload-progress")
-
};
-
var funs = {
-
-
"fileSelected": 기능() {
-
var 파일 = (doms.fileToUpload)[0].files;
-
var 개수 = files.length;
-
for (var index = 0; index < count; index ) {
- var 파일 = 파일[색인];
- var fileSize = 0;
- (file.size > 1024 * 1024)
-
fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() 'MB';
-
그 밖에
-
fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() 'KB';
-
}
-
funs.uploadFile()
-
},
-
-
uploadFile: 함수() {
-
var fd = new FormData();
-
var files = (doms.fileToUpload)[0].files;
-
var 개수 = 파일 길이
-
for (var index = 0; index < count; index ) {
- var 파일 = 파일[색인]
fd.append(opts.file, file);- //양식 데이터에 파일 추가
funs.previewImage(file);- //업로드하기 전에 이미지를 미리 보거나 다른 방법으로 txt를 미리 봅니다.
-
var- xhr = new XMLHttpRequest()
xhr.upload.addEventListener(
"진행"- , funs.uploadProgress, false); // 업로드 진행 상황 모니터링 xhr.addEventListener(
"load"- , funs.uploadComplete, false); >
xhr.addEventListener("오류"
, opts.uploadFailed, - false); >
xhr.open("POST", opts.url)
- xhr.send(fd)
},
-
- 미리보기 이미지: 기능(파일) {
- var 갤러리 = doms.thumb;
- var img = document.createElement("img")
img.file = 파일 -
doms.thumb.html(img) -
- //FileReader 메서드를 사용하여 이미지 콘텐츠 표시
- var reader = new FileReader()
reader.onload = (- 함수(aImg) {
- 반환 기능(e) {
aImg.src = e.target.result -
- })(img)
- reader.readAsDataURL(파일)
- },
- uploadProgress:
기능- (evt) {
if- (evt.lengthComputable) {
var- ratesComplete = Math.round(evt.loaded * 100 / evt.total)
doms.progress.html(percentComplete.toString()
'%'- )
}, -
- "업로드 완료"
: - 기능(evt) {
경고(evt.target.responseText)
- };
- doms.fileToUpload.on("변경", 함수() {
- doms.progress.find("span").width("0"); >
- funs.fileSelected()
- })
- })
- }
- })
- })(젭토)
전화 방법:
JavaScript 코드클립보드에 콘텐츠 복사
- $(".camera-area").fileUpload({
- "url": "savetofile.php",
- "파일": "myFile"
- })
PHP 부분:
PHP 코드클립보드에 콘텐츠 복사
-
- if (isset($_FILES['myFile'])) {
- // 예:
- writeLog($_FILES)
- move_uploaded_file($_FILES['myFile']['tmp_name'], "업로드/" . $_FILES['myFile']['이름'])
- 에코 '성공'
- }
- 함수 writeLog($log){
- if(is_array($log) | | is_object($log)){
- $log = json_encode($log);
}
-
- $log = $log."rn"
-
- file_put_contents('log.log', $log,FILE_APPEND)
}
-
?>
-
위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.
원문: http://www.cnblogs.com/hutuzhu/p/5254532.html