Results 1 to 4 of 4

Thread: [RESOLVED] AJAX file & image upload

  1. #1
    Join Date
    Mar 2007

    resolved [RESOLVED] AJAX file & image upload

    I have a conundrum of sorts, I want to have a dual purpose form, the form is only ever going to be on my computer so none of the usual security needs will be present, so I found a AJAX script on the W3C site and I modified a little.

    HTML Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Untitled Document</title>
    function upload() {   
    	var client = new XMLHttpRequest();
    	var file = document.getElementById("contentSelect");
    	/* Create a FormData instance */
    	var formData = new FormData();
    	/* Add the file */ 
    	formData.append("upload", file.files[0]);
    	client.open("post", "upload.php", true);
    	client.setRequestHeader("Content-Type", "multipart/form-data");
    	/* Check the response status */  
    	client.onreadystatechange = function(){
       		if(client.readyState == 4 && client.status == 200)
    		alert(client.statusText + " " + client.responseText);
    	client.send(formData);  /* Send to server */ 
    <form name="uploadfile" action="javascript:;" method="POST" enctype="multipart/form-data" onsubmit="return false;">
    	<input type="hidden" name="POST_MAX_SIZE" value="99999999" />
    	<input type="file" id="contentSelect" name="contentSelect" />
    	<input type="submit" name="submit" value="Submit"  onclick="upload()"/>
    The form itself reports back that everything is OK, the file was not showing in the directory for the upload so I made the PHP script return the upload name but instead of getting the filename back, I get an error message.

    This message reads...
    OK<br />
    <b>Warning<b />: Missing boundary in multipart/form-data POST data in <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        <html lang="en">
                <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>Upload error</title>
            <div id="Upload">
                <h1>Upload failure</h1>
                <p>An error has occured: 
                <span class="red"> the upload form is needed</span>
                 The upload form is reloading</p>
    Well the upload form is being used and the upload form without the feed back is giving a thumbs up.

    The upload script is PHP a stripped down version of the image upload script in the forum sticky post.
    PHP Code:
    // first let's set some variables

    // make a note of the current working directory, relative to root.
    $directory_self str_replace(basename($_SERVER['PHP_SELF']), ''$_SERVER['PHP_SELF']);

    // make a note of the directory that will recieve the uploaded file
    $uploadsDirectory $_SERVER['DOCUMENT_ROOT'] . $directory_self 'media/';

    // fieldname used within the file <input> of the HTML form
    $fieldname "contentSelect";
    $uploadForm "AVLan";
    // possible PHP upload errors
    $errors = array(=> 'php.ini max file size exceeded'=> 'html form max file size exceeded'=> 'file upload was only partial'=> 'no file was attached'=> 'mime type not supported');

    // check the upload form was actually submitted else print the form
    isset($_POST['submit']) or error('the upload form is needed'$uploadForm);

    // mime check
    $allowedMime = array('image/jpg''image/jpeg''image/png''image/gif''audio/mpeg''audio/mp4''audio/wav''audio/ogg');
    in_array($_FILES['uploadedFile']['type'], $allowedMime)) or error($errors[5], $uploadForm);

    // check for PHP's built-in uploading errors
    ($_FILES[$fieldname]['error'] == 0)
    error($errors[$_FILES[$fieldname]['error']], $uploadForm);
    // check that the file we are working on really was the subject of an HTTP upload
    error('not an HTTP upload'$uploadForm);
    // If its an image, test it to get the image size.
    if(in_array(array($_FILES['uploadedFile']['type'],array('image/jpg''image/jpeg''image/png''image/gif')))) @getimagesize($_FILES[$fieldname]['tmp_name']) or error('only image uploads are allowed'$uploadForm);

    $uploadFilename $_FILES[$fieldname]['name'];
    // now let's move the file to its final location and allocate the new filename to it
    @move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadFilename)
    error('receiving directory insuffiecient permission'$uploadForm);
    //echo $uploadFilename;  <-- this is what I put in to echo back some information, its commented out at present
    // The following function is an error handler which is used 
    // to output an HTML error page if the file upload fails
    function error($error$location$seconds 5)
    header("Refresh: $seconds; URL=\"$location\"");
    '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'."\n".
    '<html lang="en">'."\n".
    '    <head>'."\n".
    '        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">'."\n\n".
    '        <link rel="stylesheet" type="text/css" href="stylesheet.css">'."\n\n".
    '    <title>Upload error</title>'."\n\n".
    '    </head>'."\n\n".
    '    <body>'."\n\n".
    '    <div id="Upload">'."\n\n".
    '        <h1>Upload failure</h1>'."\n\n".
    '        <p>An error has occured: '."\n\n".
    '        <span class="red">' $error '...</span>'."\n\n".
    '         The upload form is reloading</p>'."\n\n".
    '     </div>'."\n\n".
    // end error handler 
    Any ideas on how I cure this because when the script is used in the conventional way, the upload page submits to an upload.php script I get no problems and the file uploads and appears in the intended directory.

    I really don't see why a multipart/form-data conventional form will upload where as an AJAX based form using the same multipart/form-data would produce the error.
    Last edited by \\.\; 10-30-2013 at 08:08 AM.
    --> JavaScript Frameworks like JQuery, Angular, Node <--
    ... and please remember to wrap code with forum BBCode tags:-

    [CODE]...[/CODE] [HTML]...[/HTML] [PHP]...[/PHP]

    If you can't think outside the box, you will be trapped forever with no escape...

  2. #2
    Join Date
    May 2006
    Somewhere behind your screen
    did you try to link jquery and use jquery $.post instead of it?
    signature under construction

  3. #3
    Join Date
    Mar 2007
    No JQuery, this has to be in JavaScript (Being a bit of a purist on that point) and the development is on my local LAN which has no internet access point, so JQuery is really out the question on both counts.
    --> JavaScript Frameworks like JQuery, Angular, Node <--
    ... and please remember to wrap code with forum BBCode tags:-

    [CODE]...[/CODE] [HTML]...[/HTML] [PHP]...[/PHP]

    If you can't think outside the box, you will be trapped forever with no escape...

  4. #4
    Join Date
    Mar 2007
    Solved with the help of MDN


    After a bit of fudging around with the demo script, I got an AJAX uploading page that allows me to upload an audio file or an image

    I really can't be buggered to decipher how they did it, so I have just used their demo script and modded it to my needs.
    --> JavaScript Frameworks like JQuery, Angular, Node <--
    ... and please remember to wrap code with forum BBCode tags:-

    [CODE]...[/CODE] [HTML]...[/HTML] [PHP]...[/PHP]

    If you can't think outside the box, you will be trapped forever with no escape...

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center



X vBulletin 4.2.2 Debug Information

  • Page Generation 0.11497 seconds
  • Memory Usage 2,920KB
  • Queries Executed 15 (?)
More Information
Template Usage (35):
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (1)bbcode_code
  • (1)bbcode_html
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (4)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (72):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • bbcode_parse_start
  • postbit_imicons
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates