使用包含文件输入的AJAX提交HTML表单

时间:2011-04-09 00:18:55

标签: jquery html ajax forms browser

您可以通过AJAX提交具有文件类型输入的表单吗?我正在尝试使用jquery执行此操作但似乎无法序列化正在提交的文件。这是否被浏览器阻止作为安全问题?有办法吗?

4 个答案:

答案 0 :(得分:3)

您可以使用HTML5的File API来执行此操作:

http://www.html5rocks.com/tutorials/file/dndfiles/

有关使用它发布的讨论,您可以从

开始

http://groups.google.com/group/play-framework/browse_thread/thread/6223a9b25b87a839/6c74eda4f7b33010

基本上,使用File API,javascript可以从本地系统读取文件,如果浏览器支持它,那么您可以通过ajax调用以及您需要提交的任何其他内容发布该文件。< / p>

如果您需要提交多个文件,这可能是一个很好的起点:

http://robertnyman.com/2010/04/22/using-the-file-api-for-reading-file-information-multiple-file-uploads-another-sister-specification-to-html5/

如果你必须使用jQuery,那么你可以试试这个插件,虽然我从来没有用过它:

http://plugins.jquery.com/blueimp-file-upload-jquery-ui/

答案 1 :(得分:2)

我没有正确解释为什么我贬低了Scott Harwell。我被投票,因为这可以完成,我一直这样做。我的代码如下:

html标签:

 <form id="inputForm1" method="POST" enctype="multipart/form-data" ACTION="">
    <div id="file-attachment">
        <div style="float:left;">file:</div>
        <div id="file-sub" style="float:left;">
            <input type="file" id="WebAccessFile" name="WebAccessFile" size="45" value="">
        </div>
    </div>
 </form>

关键是enctype="multipart/form-data"

我的jQuery ajax语句如下:

$.ajaxFileUpload({url:'/LonApps/FoxWeb.exe/EWI/ewiprocedures?Proc=addrelease',
    secureuri: false,
    fileElementId:'WebAccessFile',
    dataType: 'text'
});

我使用Visual FoxPro作为此函数的编码语言,因此我将发布我的VFP代码,但您可以将此代码调整为您正在使用的编码语言:

 loAttachment = Request.FormFieldObject("WebAccessFile")
 lcReleaseMessage = loAttachment.FileName
 lcSaveFile = ""
 IF loAttachment.ContentLength > 0
    lcFileName = loAttachment.FileName
    lcFileContent = loAttachment.Value()
    lcSaveFile = "D:\Website\Publish\Depts\EWI\docs\" + lcFileName
    SET SAFETY OFF 
    STRTOFILE(lcFileContent, lcSaveFile)
    SET SAFETY ON 
    lcHTTPSaveFile = "/Publish/Depts/EWI/docs/" + lcFileName
 ENDIF

这是接收输入值为loAttachment(lo代表Local Object)。然后,除其他外,它查找附件内容长度是否大于0,如果是,则将附件保存到本地Web目录以供以后访问。

答案 2 :(得分:0)

答案 3 :(得分:0)

技术答案是否定的,但是有一些“hacks”将您的表单发布到隐藏的iFrame,以便看起来好像是Ajax。谷歌搜索应该会产生很多例子。