emsApplication/sdk/include/cgicc/FormFile.h

238 lines
6.5 KiB
C++

/* -*-mode:c++; c-file-style: "gnu";-*- */
/*
* $Id: FormFile.h,v 1.12 2014/04/23 20:55:04 sebdiaz Exp $
*
* Copyright (C) 1996 - 2004 Stephen F. Booth <sbooth@gnu.org>
* 2007 Sebastien DIAZ <sebastien.diaz@gmail.com>
* Part of the GNU cgicc library, http://www.gnu.org/software/cgicc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*/
#ifndef _FORMFILE_H_
#define _FORMFILE_H_ 1
#ifdef __GNUG__
# pragma interface
#endif
/*! \file FormFile.h
* \brief Class representing a file submitted via an HTML form.
*
* FormFile is an immutable class reprenting a file uploaded via
* the HTTP file upload mechanism. If you are going to use file upload
* in your CGI application, remember to set the ENCTYPE of the form to
* \c multipart/form-data.
*/
#include <iostream>
#include <string>
#include "CgiDefs.h"
namespace cgicc {
// ============================================================
// Class FormFile
// ============================================================
/*! \class FormFile FormFile.h cgicc/FormFile.h
* \brief Class representing a file submitted via an HTML form.
*
* FormFile is an immutable class reprenting a file uploaded via
* the HTTP file upload mechanism. If you are going to use file upload
* in your CGI application, remember to set the ENCTYPE of the form to
* \c multipart/form-data.
* \verbatim
<form method="post" action="http://change_this_path/cgi-bin/upload.cgi"
enctype="multipart/form-data">
\endverbatim
* \sa FormEntry
*/
class CGICC_API FormFile
{
public:
// ============================================================
/*! \name Constructors and Destructor */
//@{
/*!
* \brief Default constructor
*
* Shouldn't be used.
*/
inline
FormFile()
{}
/*!
* \brief Create a new FormFile.
*
* This is usually not called directly, but by Cgicc.
* \param name The \e name of the form element.
* \param filename The \e filename of the file on the remote machine.
* \param dataType The MIME content type of the data, if specified, or 0.
* \param data The file data.
*/
FormFile(const std::string& name,
const std::string& filename,
const std::string& dataType,
const std::string& data);
/*!
* \brief Copy constructor.
*
* Sets the name, filename, datatype, and data to those of \c file
* @param file The FormFile to copy.
*/
inline
FormFile(const FormFile& file)
{ operator=(file); }
/*!
* \brief Destructor
*
* Delete this FormFile object
*/
inline
~FormFile()
{}
//@}
// ============================================================
/*! \name Overloaded Operators */
//@{
/*!
* \brief Compare two FormFiles for equality.
*
* FormFiles are equal if they have the same filename.
* @param file The FormFile to compare to this one.
* @return \c true if the two FormFiles are equal, \c false otherwise.
*/
bool
operator== (const FormFile& file) const;
/*!
* \brief Compare two FormFiles for inequality.
*
* FormFiles are equal if they have the same filename.
* \param file The FormFile to compare to this one.
* \return \c false if the two FormFiles are equal, \c true otherwise.
*/
inline bool
operator!= (const FormFile& file) const
{ return ! operator==(file); }
#ifdef WIN32
/* Dummy operator for MSVC++ */
inline bool
operator< (const FormFile& file) const
{ return false; }
#endif
/*!
* \brief Assign one FormFile to another.
*
* Sets the name, filename, datatype, and data to those of \c file
* \param file The FormFile to copy.
* \return A reference to this.
*/
FormFile&
operator= (const FormFile& file);
//@}
// ============================================================
/*! \name Accessor Methods
* Information on the uploaded file
*/
//@{
/*!
* \brief Write this file data to the specified stream.
*
* This is useful for saving uploaded data to disk
* \param out The ostream to which to write.
*/
void
writeToStream(std::ostream& out) const;
/*!
* \brief Get the name of the form element.
*
* The name of the form element is specified in the HTML form that
* called the CGI application.
* \return The name of the form element.
*/
inline std::string
getName() const
{ return fName; }
/*!
* \brief Get the basename of the file on the remote machine.
*
* The filename is stripped of all leading directory information
* \return The basename of the file on the remote machine.
*/
inline std::string
getFilename() const
{ return fFilename; }
/*!
* \brief Get the MIME type of the file data.
*
* This will be of the form \c text/plain or \c image/jpeg
* \return The MIME type of the file data.
*/
inline std::string
getDataType() const
{ return fDataType; }
/*!
* \brief Get the file data.
*
* This returns the raw file data as a string
* \return The file data.
*/
inline std::string
getData() const
{ return fData; }
/*!
* \brief Get the length of the file data
*
* The length of the file data is usually measured in bytes.
* \return The length of the file data, in bytes.
*/
inline std::string::size_type
getDataLength() const
{ return fData.length(); }
//@}
private:
std::string fName;
std::string fFilename;
std::string fDataType;
std::string fData;
};
} // namespace cgicc
#endif /* ! _FORMFILE_H_ */