The datafile parameter input for the geoprocessing widget in the Viewer for Flex does not allow the user to upload a file to the server from their local machine. It only accepts paths that begin with http:// or https://
I was under the impression that this was going to be fixed at the 3.1 release, but the widget still won't accept a local file.
This thread indicates all the pieces are available if you have the capability of creating your own custom widget:
http://forums.arcgis.com/threads/64114-Uploads-capability-on-Geoprocessor
There are many of us that cannot create custom widgets. If ESRI will update the geoprocessing widget so it will take a local file, I, and many other users will be very happy!
http://forums.arcgis.com/threads/54441-Uploading-to-SDE-from-Flex-Viewer
http://forums.arcgis.com/threads/41089-datafile-input-broken-in-Geoprocessing-widget
http://forums.arcgis.com/threads/36560-Geoprocessing-widget-has-me-stumped
http://forums.arcgis.com/threads/60510-Geoprocessing-with-File-Input
import arcpy import zipfile import os inFile = arcpy.GetParameterAsText(0) # Create a folder in the scratch directory to extract zip to zipFolder = os.path.join(arcpy.env.scratchFolder, "zipContents") os.mkdir(zipFolder) # Extract the zip contents zip2Extract = zipfile.ZipFile(inFile, 'r') zip2Extract.extractall(zipFolder) zip2Extract.close() # Create a folder in the scratch directory to hold the fgdb which will be downloaded fgdbFolder = os.path.join(arcpy.env.scratchFolder, "fgdbOutput") os.mkdir(fgdbFolder) # Work through all the FeatureClasses inside the extracted zip folder for dirpath, dirnames, filenames in arcpy.da.Walk(zipFolder, datatype="FeatureClass"): for filename in filenames: # You could replace the code below here with your own code to do what you want.... arcpy.AddMessage("Copying: {}".format(filename)) # Strip .shp from the filename when merging shapefiles if filename.endswith("shp"): outFilename = filename[:-4] else: outFilename = filename # Copy each featureclass into the output.gdb arcpy.CopyFeatures_management(os.path.join(dirpath, filename), os.path.join(fgdbFolder, "output.gdb", outFilename))
The following code (10.1 + only) walks through a directory and finds FeatureClasses (this example assumes a folder of "zip" files).
It then copies each one into a fGDB. You can change what it does, but the logic in it should start you off.
You'll notice that a directory is created inside the scratchFolder (the variable "ZipFolder") - this is where the uploaded ZipFile is extracted to. Then the code looks in there.import arcpy import zipfile import os inFile = arcpy.GetParameterAsText(0) # Create a folder in the scratch directory to extract zip to zipFolder = os.path.join(arcpy.env.scratchFolder, "zipContents") os.mkdir(zipFolder) # Extract the zip contents zip2Extract = zipfile.ZipFile(inFile, 'r') zip2Extract.extractall(zipFolder) zip2Extract.close() # Create a folder in the scratch directory to hold the fgdb which will be downloaded fgdbFolder = os.path.join(arcpy.env.scratchFolder, "fgdbOutput") os.mkdir(fgdbFolder) # Work through all the FeatureClasses inside the extracted zip folder for dirpath, dirnames, filenames in arcpy.da.Walk(zipFolder, datatype="FeatureClass"): for filename in filenames: # You could replace the code below here with your own code to do what you want.... arcpy.AddMessage("Copying: {}".format(filename)) # Strip .shp from the filename when merging shapefiles if filename.endswith("shp"): outFilename = filename[:-4] else: outFilename = filename # Copy each featureclass into the output.gdb arcpy.CopyFeatures_management(os.path.join(dirpath, filename), os.path.join(fgdbFolder, "output.gdb", outFilename))
The following code (10.1 + only) walks through a directory and finds FeatureClasses (this example assumes a folder of "zip" files).
It then copies each one into a fGDB. You can change what it does, but the logic in it should start you off.
You'll notice that a directory is created inside the scratchFolder (the variable "ZipFolder") - this is where the uploaded ZipFile is extracted to. Then the code looks in there.import arcpy import zipfile import os inFile = arcpy.GetParameterAsText(0) # Create a folder in the scratch directory to extract zip to zipFolder = os.path.join(arcpy.env.scratchFolder, "zipContents") os.mkdir(zipFolder) # Extract the zip contents zip2Extract = zipfile.ZipFile(inFile, 'r') zip2Extract.extractall(zipFolder) zip2Extract.close() # Create a folder in the scratch directory to hold the fgdb which will be downloaded fgdbFolder = os.path.join(arcpy.env.scratchFolder, "fgdbOutput") os.mkdir(fgdbFolder) # Work through all the FeatureClasses inside the extracted zip folder for dirpath, dirnames, filenames in arcpy.da.Walk(zipFolder, datatype="FeatureClass"): for filename in filenames: # You could replace the code below here with your own code to do what you want.... arcpy.AddMessage("Copying: {}".format(filename)) # Strip .shp from the filename when merging shapefiles if filename.endswith("shp"): outFilename = filename[:-4] else: outFilename = filename # Copy each featureclass into the output.gdb arcpy.CopyFeatures_management(os.path.join(dirpath, filename), os.path.join(fgdbFolder, "output.gdb", outFilename))
You have to use a script tool. Theres no tool in the toolbox (to put into modelbuilder) to extract a zipfile.
You can wrap the above script as a script tool and put that into a model if it serves your purpose.
You have to use a script tool. Theres no tool in the toolbox (to put into modelbuilder) to extract a zipfile.
You can wrap the above script as a script tool and put that into a model if it serves your purpose.
You have to use a script tool. Theres no tool in the toolbox (to put into modelbuilder) to extract a zipfile.
You can wrap the above script as a script tool and put that into a model if it serves your purpose.