Page MenuHomePhabricator

Automatically append extension if the user entered a filename without extension during upload
Closed, ResolvedPublic

Description

Author: wikimedia

Description:
I was getting an error about no file extension through the UI since my apache/php config creates temp files in /tmp/ with no file extension. So I can up with a solution around the issues since it seems that MediaWiki requires a file extension to allow an upload to complete. This is more of a "I found a bug for me, and I fixed here. And here's how." and you can tell me if that was stupid or there was already way around this.

I added $mTempOrigName to the Base class, then set it in FromFile. Then in getTitle of the Base class if the tempname fails to produce a file extension I test the original name to see if I can get an extension from that. If so I override the vars and thing continue like normal.

includes/upload/UploadBase.php

protected $mTempPath, $mTempOrigName;

...

        list( $partname, $ext ) = $this->splitExtensions( $this->mFilteredName );
if (count($ext) == 0) { // extension was missing from apache temp file, try original name
    list($t_partname,$t_ext) = $this->splitExtensions( $this->mTempOrigName );
    if (count($t_ext) > 1) {
        $partname = $t_partname;
        $ext = $t_ext;
    }
}

includes/upload/UploadFromFile.php

        if( !$desiredDestName )
                $desiredDestName = $request->getFileName( 'wpUploadFile' );
$this->mTempOrigName = $request->getFileName( 'wpUploadFile' );
        return $this->initializePathInfo(

Not sure if this helps anyone else but it fixes my last blocker to upgrading.


Version: 1.16.x
Severity: enhancement

Details

Reference
bz26285

Event Timeline

bzimport raised the priority of this task from to Medium.Nov 21 2014, 11:19 PM
bzimport set Reference to bz26285.
bzimport added a subscriber: Unknown Object (MLST).

wikimedia wrote:

I copied an older version of my code. The (count($t_ext) > 1) should be (count($t_ext) > 0).

Bryan.TongMinh wrote:

I don't really get this. $mFilteredName is constructed from $mDesiredDestName, which is the filename as sent by the browser, and not the Apache temp file.

wikimedia wrote:

in my logging I found that the $mFilteredName isn't the original name, but then random name they put into the text input box on the form. As a result it doesn't have an extension most of the time. I needed the original filename to actually get the file extension as a result.

Bryan.TongMinh wrote:

Well, users should add the extension in the desired name indeed. However if as you say there is a possibility of determining the original filename, then think it would not be unreasonable to guess the extension ourselves.

(changed summary accordingly)

Bryan.TongMinh wrote:

Feature request, so marking as enhancement.

Gilles raised the priority of this task from Medium to Unbreak Now!.Dec 4 2014, 10:29 AM
Gilles moved this task from Untriaged to Done on the Multimedia board.
Gilles lowered the priority of this task from Unbreak Now! to Medium.Dec 4 2014, 11:23 AM