简体   繁体   中英

perl filehandle doesn't read file with space in its name

I have a java program that call my Perl script to upload a file. It has a file parameter to the Perl script that contain the location of file to upload.

    public static void legacyPerlInspectionUpload(String creator, String artifactId, java.io.File uploadedFile, String description ) {

    PostMethod mPost = new PostMethod(getProperty(Constants.PERL_FILE_URL) + "inspectionUpload.pl");
    try {
        String upsSessionId = getUpsSessionCookie();

        //When passing multiple cookies as a String, seperate each cookie with a semi-colon and space
        String cookies = "UPS_SESSION=" + upsSessionId;
        log.debug(getCurrentUser() + " Inspection File Upload Cookies " + cookies);


        Part[] parts = {
                new StringPart("creator", creator),
                new StringPart("artifactId", artifactId),
                new StringPart("fileName", uploadedFile.getName()),
                new StringPart("description", description),
                new FilePart("fileContent", uploadedFile) };


        mPost.setRequestEntity(new MultipartRequestEntity(parts, mPost.getParams()));
        mPost.setRequestHeader("Cookie",cookies);

        HttpClient httpClient = new HttpClient();
        int status = httpClient.executeMethod(mPost);
        if (status == HttpStatus.SC_OK) {
            String tmpRetVal = mPost.getResponseBodyAsString();
            log.info(getCurrentUser() + ":Inspection Upload complete, response=" + tmpRetVal);
        } else {
            log.info(getCurrentUser() + ":Inspection Upload failed, response="  + HttpStatus.getStatusText(status));
        }
    } catch (Exception ex) {
        log.error(getCurrentUser() + ": Error in Inspection upload reason:" + ex.getMessage());
        ex.printStackTrace();
    } finally {
        mPost.releaseConnection();
    }
}

In this part of my Perl script, it get the information about the file, read from it and write the content to a blink file in my server.

#
# Time to upload the file onto the server in an appropropriate path.
#
$fileHandle=$obj->param('fileContent');

writeLog("fileHandle:$fileHandle"); 

open(OUTFILE,">$AttachFile");

while ($bytesread=read($fileHandle,$buffer,1024)) {

    print OUTFILE $buffer;
}

close(OUTFILE);

writeLog("Download file, checking stats.");

#
# Find out if the file was correctly uploaded. If it was not the file size will be 0.
#
($size) = (stat($AttachFile))[7];

Right now the problem is this only work for file with no space in its name, otherwise $size is 0. I was reading online and it seems both Java file and Perl filehandle work with space, so what am I doing wrong?

Your poor variable naming has tripped you up:

open(OUTFILE,">$AttachFile");
     ^^^^^^^---this is your filehandle

while ($bytesread=read($fileHandle,$buffer,1024)) {
                       ^^^^^^^^^^^--- this is just a string

You're trying to read from something that's NOT a filehandle, it's just a variable whose name happens to be "filehandle". You never opened up the specified file for reading. eg you're missing

open(INFILE, "<$fileHandle");

read(INFILE, $buffer, 1024);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM